TITLE : 인공지능 1위 대학원에서 배워보는 딥러닝 입문 3시간 완성 강의 (Part 1)
YOUTUBE LINK : https://youtu.be/qCJL3LD6I1g PRESENTER : 메타코드M DURATION : 02:46:20 PUBLISHED : 2022-10-01
Table of contents
FULL SCRIPT
안녕하세요.
딥러닝 강의에 오신 것을 정말 환영드립니다.
딥러닝, AI, 머신러닝 요즘 정말 되게 많이 듣는 표현들이죠.
근데 딥러닝이 요즘 세대에 조금 더 트렌드에 맞게 이제 성능이 좋아지면서 깊게 그리고 좀 더 퍼포먼스가 좋아진 쪽으로 가는 모델을 좀 더 차별성 있게 딥러닝이라고 합니다.
딥러닝이 핫한 만큼 정말 콘텐츠가 많죠.
메타코드나 유튜브나 그만 쳐봐도 이제 강의들이 많이 찾아볼 수 있는데 제가 어떻게 그런 콘텐츠와 구별을 할 수 있을지 좀 고민을 해봤습니다.
근데 그 차별성 두 개에서는 제가 두 가지에 대해서 꼭 강조하고 싶은 것이 있는데 첫 번째는 제 강의는 좀 더 최신다.
두 번째는 이제 잘하는 콘텐츠를 모아온 것이다.
최신적인 것과 잘하는 것과 근데 최신한 게 왜 이렇게 중요하냐고 생각할 수 있는데 딥러닝만큼 빨리 변하는 토픽이 없다고 생각합니다.
예를 들자면 제가 학부 때 벌써 8년 전인데 그때는 제가 콩고민이었는데도 딥러닝에 대한 강의 아니면 코스가 제공되기 하나도 없었습니다.
근데 이제 지금 상황을 보면은 벌써 딥러닝이나 각 교수님만의 특별화된 코스 강의나 아니면 이제 연구 방식이나에 따라서 지금 수없이 많이 제공되는 게 딥러닝 수업들인데요.
만약에 예를 들어서 이전에는 딥러닝이 약간 이렇게 좀 리니어하게 변동되고 있다고 하면은 요즘은 확실히 여러 분야나 모아 놓은 사람들이 참여하고 있기 때문에 정말 엑스포네셜하게 지금 올라가고 있기 때문에 뭐 작년이나 아니면 몇 년 전 것 콘텐츠를 봤다 해도 새로운 라이버리들이나 새로운 성능들 아니면 새로운 데이터셋들이 계속 나오고 있기 때문에 가장 최신 내용들을 듣는 게 딥러닝 쪽에서는 정말 중요하다고 생각하고요.
그럼 이제 두 번째 잘하는 거에 대해서 차별성을 준다고 했는데 제가 잘한다는 것보다는 제가 잘하는 것들을 모은다고 하지 않았습니까 이제 제가 딥러닝 쪽을 공부하면서 배우게 된 트렌드가 한 사람 제가 직접 정말 잘하는 것보다는 잘하는 툴들을 잘 이해하고 그거를 빨리빨리 붙여서 제 연구 아니면 제 과제에 대해서 잘 적용할 수 있는 게 정말 요즘 트렌드가 그런 것 같습니다.
내가 직접 관심 있어 하고 그걸 직접 다 일일이 개발하다 보면은 너무나 느리고 데이터도 없고 하기 때문에 요즘 트렌드는 하드웨어에 있는부터 소프트웨어부터 데이터셋까지 다 그런 것들을 조합하면서 내 거에 맞추게 조금씩 변경하는 게 지금 딥러닝의 트렌드이기 때문에 어떤 것들이 존재하고 그런 것에 대한 state of the art 뭐가 제일 좋은지를 붙이는 것에 대해서 조금 더 설명드리자고 생각합니다.
그러면은 제 소개에 대해서 잠시 말씀드리고 싶은데 저는 지금 현재 CMU 카네기 멜론에서 박사과장을 하고 있습니다.
이제 카네기 멜론이면 한국에서는 잘 모를 수 있는데 지금 AI 쪽으로는 저희 학교가 US랭킹에서는 아주 자신있게 그리고 뿌듯하게 1등을 얻고 있고요 그리고 2등은 MIT, 스탠포드, 버클리 이렇게 있는데 사실 이 순위는 1, 2, 3, 4라고 진짜 머리 한 켤 나누는 거고요.
이 네 학교는 공동 1위라고 지금 모두 다 알고 있고요.
AI 쪽에서는 그리고 CS 쪽으로는 이 카네기 멜론이 몇 십 년 전부터 저희가 CS 쪽으로 먼저 선두자 한 학교여 가지고 여기서도 미국 이제 탑, 아이빌리그나 다른 대학교를 봐서도 카네기 멜론이 지금 1등을 차지하고 있죠.
자, 이걸 그래서 제 자랑하려고 한 건 아니고 이제 아까 제가 말씀드렸던 차별성 중에서 두 번째 좋은 것들을 갖고 와야 된다.
특히 딥러닝 같은 분야에서는 그래서 이 학교에서 제가 소속된 학교지만은 딥러닝에 대해서 제가 어떻게 강의를 하면 좋을까 생각을 하고 있었는데 그 저희가 정말 랭킹이 높은 이유가 정말 세계에서 뛰어난 교수님들을 다 모셔와서 랭킹이 높아진 거지 않겠습니까?
그래서 제가 직접 콘텐츠를 만드는 것보다 제가 지난 학기 때 참여했던 수업들 중에서 지금 이 수업만 진짜 몇 년 동안 계속 하시는 교수님이 있어요.
그 교수님이 이제 내용을 정말 닦고 닦고 닦아서 정말 이게 파인튠, 스트림라인 된 과제인데 여기에서 이제 핵심들만 뽑아서 이제 코딩과 같이 그 강의와 실습 내용을 같이 묶어서 중요한 것들만 전달 드리고자 콘텐츠를 만들고 있습니다.
자 그러면은 이제 딥러닝 쪽으로 강의 내용을 한번 시작해 볼게요.
딥러닝이나 AI나 머신러닝 쪽으로 하면은 정말 흔히 많이 봤던 예시라고 할 수 있는데 이전에는 정말 머신러닝이라고 하면은 사진 한 장에 사진에 뭐가 있는지를 구별시키는 게 이제 머신러닝의 정말 선두자가 최고의 성능이다 그거를 정말 많이 사람들이 논문 등이나 그런 걸 보면은 이런 걸로 많이 경쟁을 했었거든요.
예를 들어서 사람들을 더 많이 인식할 수 있다 아니면은 이거를 정확하게 판별하는 게 97%다 아니면 98%다 그래서 이 정확도를 개선하는 것을 지금 지난 몇 년 동안 계속 조금씩 경쟁하면서 0.몇 퍼센트 더 증가되면 바로 논문에 실리고 그런 예시로 계속 딥러닝 기술들을 끌어모으고 있었어요.
이미지 인식하는 것에 대한 예시로 갖고 근데 이제 그 예시로 갖고 하면 좋은 점이 응용이 다양하지 않지만은 한 가지 문제를 갖고 여러 사람이 이제 계속 비슷한 문제를 풀다 보면은 당연히 성능이 엄청 높아지겠죠 그래서 이제 어느 정도 높아지다 보니 이 성능이 결국 인식하는 거나 문제를 푸는 게 컴퓨터가 인공지능을 사용하니 사람이 이 사진을 보고 인식하는 것보다도 더 정확도가 높아가니 이제 이 연구자들 분야에서는 이렇게 생각하게 된 거죠 아 이제 이미지 인식하는 것은 이제 정말 사람이 할 수 있는 것보다 더 정확하게 할 수 있으니 이거는 해결된 문제다.
그럼 이 정도 성능, 이 정도 이제 그 검증된 연구 성과로 어떤 다른 응용을 찾을 수 있을까 하면서 이제 뭐 자율주행이나 아니면은 그 그런 쪽으로도 많이 나오겠죠.
근데 이제 자율주행도 사실 너무나 잘 돼 가지고 벌써 요즘 스타트업들이나 나오는 것들이 다 자율주행 쪽으로 하고 있어요 그만큼 이거는 이제 연구 문제가 아니라 상용화 이제 얼만큼 더 정확하게 빠르게 싸게 하느냐로 벌써 가고 있다는 거죠.
그럼 이제 딥러닝의 정말 그 최첨단 기술은 무엇을 하고 있느냐 라고 생각하시면 이제 인식보다는 이해력을 좀 더 탐험하고 있어요.
연구가 이해력이라고 생각하면은 예를 들어서 이전에는 사진 한 장 있었으면 이 사진이 뭐 강아지냐 고향이냐 사람이 어디에 있냐 그 정도만 갖고 있었는데 이제는 딥러닝 같은 것을 사용해서 사진을 주면은 이 사람이 무엇을 하고 있다라는 것까지 전반적인 환경과 이 사람이 그 환경과 어떻게 상호작용을 하고 있는가 그런 것을 다 이해하는 그 아예 텍스트 그 무엇을 하는 표현 언어를 아예 아웃풋으로 나오게 하는 것을 배우고 있어요 예를 들어서 이 사진을 다시 보시면은 예를 들어서 이 사진을 한번씩 보죠 그러면 이 사진 한 장을 input으로 줬을 때 아웃풋이 A man in a black shirt is playing guitar.
벌써 이 사람이 어떻게 옷을 입었는데 이 기타를 치고 있다 라는 것을 그 input, output 해서 여기 딥러닝을 해서 이렇게 아웃풋이 나오는 거죠 그래서 이런 예시들을 강아지 사진을 보면은 강아지 사진을 input을 줘요 input을 줬다는게 딥러닝 모델이 input을 갖고 막 학습하고 내가 생각하기로는 black and white dog jumps over the bar 강아지가 이 bar를 점프하고 있는 행동까지 다 배워서 판단, 이해를 하고 있다는 거죠 그래서 이제 아까 제가 보여드렸던 이런 예시가 더 이상 아니에요 이거는 진짜 2010년에서 한 15년 그때까지만 정말 연구가 많았고 여기는 뭐 그냥 차가 있다 아니면 차 종류 정도만 얘기하고 있지만은 그 정도의 딥러닝과 여기에 나오는 이제 환경이해하는 러닝과 이제 정말 달라지고 있다는 거죠 또 한가지 예시를 드리자면은 이제 환경이해력 뿐만 아니라 이제는 생성 딥러닝을 사용해서 콘텐츠를 생성하는 게 이제 정말 최첨단 기술로 나가는 것이라고 생각합니다 이게 진짜 한 4년 전부터 지금 막 톱 이슈를 많이 받고 있는 건데 지금 이 사이트가 되게 웃겨요 thispersondoesnotexist.com 이 사람은 exist하지 않다 이 사진들을 보면은 다 없는, 존재하지 않는 사람의 사진이에요 그게 무슨 말이에요 예를 들어서 컴퓨터가 딥러닝 모델이 수천명 수만 명의 이미지들을 다 뽑아요 예를 들어서 뭐 페이스북에 있는 데이터들로 사람 얼굴들을 몇만개 다 모아가지고 그걸로 이제 막 몇만개의 모델이 쌓였다고 합시다 그럼 이제 그걸로 인식해가지고 이게 input 내가 수만 명의 얼굴에 input이 있어 그러면은 딥러닝을 통해서 new face를 줄 수 있냐 그래서 그 new face가 예시를 떠서 이런거죠 그러니까 이제 더 이상 뭐 사진 한 개 주고 이게 강아지야 고양이야 그렇게 판별하는게 아니라 이제는 얼굴이라는 그 데이터들을 다 모아 놓으면은 얼굴에서 이제 눈은 두 개 있어야 되고 코가 있어야 되고 입이 있어야 되고 그래서 이제 그런걸 조금씩 변경시키면서 아예 새로운 것을 이전에 이 모델의 이 데이터세트에 있지도 않는 것을 새로 생성할 수 있는 요즘 그런 쪽으로 그 딥러닝 들이 많이 가고 있어요 그래서 이 사이트 한번 가보면 나중에 this person does not come 구글에서 쳐서 들어가 보시면은 계속 새로운 얼굴들을 던져 줄 거에요 근데 다 거기에 실제 존재하지도 않는 사람들이구요 근데 이제 이걸 좀 더 자세히 보면 좀 신기한게 이제 확실히 이게 컴퓨터가 생성한 거니까 데이터 기반으로 생성한게 된 거니까 어 뭔가 좀 우리가 사람 눈으로 봤을 때는 어색하다고 생각하는 것들이 좀 몇 가지가 있어요 예시를 들면 컴퓨터가 예시로 보고 배운 것을 생성한 것이기 때문에 예를 들어서 뭐 비대칭 하거나 그런 것들을 얘가 좀 잘 모르거든요 그래서 자세히 보면은 이 귀걸이가 짝짝이죠 사람 눈으로 봤을 때는 누가 귀걸이 이렇게 짝짝이를 하고 와 이렇게 예쁘게 생긴 모델같이 나온 분이 귀걸이 같이 짝짝이를 하고 올 리가 없잖아 우리는 그런 패턴 그런 걸 당연하게 얘기할 수 있지만 컴퓨터는 그냥 수만 명의 얼굴을 봐서 한계를 생성하기 때문에 귀걸이가 짝짝인지 아닌지 그런 것을 알 수 있는 법이 없죠 그리고 이 두 번째 예시를 보면은 이 애기의 머리 봐봐요 머리카락이 여기까지는 다 비슷하게 생성이 됐는데 이 앞머리는 아마 다른 사람의 앞머리를 갖고 와서 붙이지 않았나 라는 생각이 듭니다 그래서 좀 더 자세히 봐 가지고 다른 예시를 찾아 보시거나 여기에도 귀걸이는 없고 귀걸이는 여기 안개 있고 그런 예시들이 있다는 거죠 그래서 딥러닝이 완벽하냐는 완벽하지는 않고요 대신 이런 지금 트렌드가 여태까지는 그냥 강아지냐 고양이냐 인식하는 거에서 이제는 환경까지 물체와 환경이 어떤 상호 반영을 하고 있는지도 이해하고 더구나 이제 아예 컨텐츠 이전에 보지를 않았던 것을 새로운 것을 생성까지 할 수 있다
라는 그쪽 트렌드로 지금 가고 있다는 것을 지금 알고 계시면 좋을 것 같습니다
그리고 정말 또 재미있는 예시가 한 개 있어서 꼭 보여드리고 싶은 게 있는데 이건 진짜 작년, 올해 초에 나온 거예요 이게 OpenAI라고 지금 그 세계에서 제일 AI를 잘하는 박사들과 교수님들을 모아 놔서 지금 OpenAI라는 기관이 있어요 그 기관이 올해 초에 이 DALI라는 코드 아니면 플랫폼을 만들어서 세계에 뿌렸는데 이게 뭐를 하느냐 아까 제가 말씀드린 게 요즘 가장 최근에 딥러닝 트렌드는 이전에 보지 못했던 것을 생성하고 있다라는 게 이제 영국의 트렌드 라고 하지 않았습니까
그래서 지금 여기에 인풋은 사람이 여기에 쓰는 거예요 an astronaut riding a horse 그러면 우리가 원하는 인풋이 그 astronaut이 말을 타고 있는 것을 우리가 텍스트로 썼어요 그러면 이제 아웃풋이 이 사진이에요 그 사진을 생성한 거죠 아까는 그 얼굴 비슷한 얼굴들을 갖고 모아 놔 가지고 얼굴을 생성한 거였잖아요 지금은 이제 언어로 이제 어 뭐 이런 거 비슷한 거 찾아줘 아니면 이런 거 궁금한데 찾아줘 하는데 뭐 찾는다는 표현도 아니죠 이런 거를 보고 싶어 샀었는데 이전에 구글이나 그런 곳에서 이런 비슷한 그림이 없어요 이게 다 생성된 거에요 자기가 만든 거에요 근데 이제 그 뭐 astronaut 같은 뭐 사진들 있겠죠 그리고 말 같은 사진도 있긴 하겠죠 그런 것들을 이제 잘 스스로 제가 뭐 포지션도 다 다르게 나온 거고 예를 들어서 이 astronaut이 말 타고 있는 이렇게 나오는 포지션이 어디 있겠어요 근데 그런 거를 이제 얘가 다 모델로 엄청 학습을 해서 이런 콘텐츠도 직접 만들 수 있는 이해력이 있다 라고 이제 보여드리는 거구요 또 재밌는 그 예시가 이거를 한번 보여드리고 싶네요 이거는 이것도 올해 초에 지금 베타로 나온 건데 얘도 이제 오픈AI가 만든 거에요 이것도 한번 그 이 웹사이트에 들어가서 한번 꼭 써보세요 근데 얘는 input이 어 다시 한 발자국 올라서서 제가 계속 지금 말씀드리는 강조드리는게 생성 generation 이거든요 결국 우리가 어떤 input을 주던 어떤 우리가 원하는 output을 줄 수 있느냐가 지금 계속 러닝에 가장 최신 트렌드인데 여기에 제가 input을 주는 것은 저에 대한 이제 뭐 간단한 예시로 글을 쓴 거에요 안녕하세요 저는 뭐고 코딩에 대해서 공부하겠습니다 코딩이 중요한 이유를 말씀드리겠습니다 하고 여기다가 인서트로 어 딥러닝 너가 한번 여기에다가 추가 내용들을 집어넣어 봐 알아서 내가 이걸 줬으니 내가 첫 4줄을 썼으니 다음 몇줄을 쓸 수 있느냐 그렇게 해보면은 얘가 이제 output이에요 내가 준 input이 이정도 있으면은 얘가 스스로 이 전에 주어진 배경으로 자기가 이제 추천해 주는 거죠 뭐 코딩은 컴퓨터노고 언어들이나 설계된 규칙 뭐 이런것들이 초록색으로 나온 것들이 얘가 다 이제 딥러닝으로 이전 예시들을 수없이 많이 배우고 학습한 기관으로 내가 생각하기에는 너가 이 첫 4문장을 준다면 이런 문장들이 관심있어 하지 않겠느냐 하고 스스로 던져 주는 거에요 이게 정말 미쳤다고 생각할 수 있는게 지금 우리가 이런 예시를 아주 간단한 예시를 들었는데 얘가 얼마나 파워풀 하냐면은 어 예를 들어서 제가 이제 박사생이니까 제가 논문을 써야지 졸업하지 않겠습니까 그래서 논문에 대해서 첫 한 페이지를 썼어요 제가 지금 하고 있는 연구에 대해서 첫 페이지를 한장 딱 쓰면은 그걸 여기다가 집어넣었다고 해봐요 그러면은 뭐 물론 제가 꼭 쓰고 싶은거나 아니면 완벽한 논문은 아니겠지만 얘가 이제 그러면은 두 번째 세 번째 네 번째 페이지를 비슷한 맥락으로 자기가 수만개의 다른 논문들을 읽었으니 거기에 나온 패턴들을 내가 딥러닝 모델이 되어서 너가 첫 번째 장 줬어 그럼 그거를 기반해서 다른 이제 두 번째 세 번째 네 번째 페이지는 이렇게 나올 수 있어 라고 제안을 해주는 거죠 그러면 이제 제 삶이나 아니면 이걸 사용하는 사람들의 삶이나 훨씬 수월해지고 우리가 하는 일이나 그런걸 더 빨리 할 수 있고 더불어 이제 쓰는 이런 컨텐츠를 제공하는게 꼭 전문가가 아니어도 그냥 비슷한 예시가 아니면 중요한 데이터가 있으면 이런 플랫폼들을 사용해서 다른 사람들도 이런 기술을 비슷하게 전문가처럼 쓸 수 있는 걸 도와주는게 사실 저는 딥러닝의 가장 핵심 아니면 가장 중요한 목적이라고 생각합니다 자 그러면은 여러가지 예시를 순식간에 풀어놓고 지나갔는데 딥러닝이 요즘은 진짜 여기까지 왔구나 더 이상 진짜 아까 제가 처음에 보여드렸던 그냥 뭐 차는 여기에 있다 뭐 그런 사진으로 딥러닝을 하다 사람이 많이 안하고요 요즘은 이제 정말 우리가 상상을 초월하는 그 정도로 지금 기술력이 온 것 같아요 그래서 그 딥러닝을 같이 이렇게 공부하는 거에서 참 재밌고 이제 어 자극을 받으셨길 바랍니다 그러면은 이제 강의 내용으로 다시 돌아가 볼게요 그래서 제가 여태까지 말씀드렸던 딥러닝 패턴은 아까 계속 반복했던 언어가 있어요 그 계속 반복했던 이제 표현들이 아니면 키워드가 input과 output 그리고 이제 그 가운데 있는 것은 이제 계속 딥러닝이라고 했는데 사실 이 input이 정말 다양하게 여러가지 여러가지 포맷으로 나올 수 있어요 예를 들어서 뭐 보이스로 시리 아니면은 hey 구글 뭐 이거를 찾아봐 줘 라고 그 언어로 input을 들어가면은 output으로 오늘 날씨는 아니면 오늘 일정은 아니면은 뭐 뭐 재밌는 조크를 알려줘 하면은 이제 output으로 text로 다 이렇게 아니면 audio로 다 나올 수도 있고 얘는 이제 audio 쪽으로 많이 하는 이제 text 쪽으로 하는 딥러닝이겠죠 아니면 또 여태까지 계속 많이 봤던 예시는 input을 사진 한 장 이미지로 들이면은 이제 봤던 이제 뭐 아까 그 이 사람은 기타를 치고 있다 그 예시로 나올 수도 있고 얘는 output이 이제 text로 나오는 거죠 그래서 지금 우리가 원하는 input을 주고 원하는 output을 해서 그거를 배울 수 있는 형태 이 input output 형태를 요즘 이제 딥러닝 이 블랙박스 이거를 어떻게 설계할 수 있느냐 이게 진짜 장점이죠 이거를 잘하는 사람이 이제 엄청난 돈을 받고 잘 할 수 있겠죠
그러면 이제 저희가 딥러닝을 공부하는 사람으로서 저희가 물어볼 것은 이 input output은 우리가 정할 수 있는데 우리가 원하는 input을 줬을 때 원하는 output을 받을 수 있게 이 블랙박스를 어떻게 디자인할 수 있을까가 이제 이 코스 아니면 이 강의 전반적인 내용이 될 것입니다 네 이제 좀 쉬었으니 다시 진행하겠습니다 조금 전에는 딥리로넷워크로 아니면 딥러닝으로 무엇을 할 수 있는지에 대해서 조금 설명했었는데 이제는 딥러닝 전에 이전에는 어떻게 문제를 풀어 왔고 왜 이제 딥러닝이 더 개선된 방식에 대해서 설명을 드리자면 딥러닝이 생기기 전에 그래도 사람들이 어떻게든 공식을 해서 풀었을 거잖아요 뭐 예를 들어서 이미지 인식하는 거라고 했을 때 이전에도 딥러닝 하기 전에도 사람들이 공학자들이 어떻게든 고양이하고 강아지를 구별하는 컴퓨터 알고리즘을 다 개발했었어요 근데 그때는 그 대표적인 예시가 이제 다 수학적 수식을 세워서 이제 그거를 이미지를 구별하는 거거든요 수식적이라는게 사람이 직접 고양이는 뭐 귀가 좀 뾰족하고 두개가 있고 사이즈가 강아지 보단 조금 더 작다 아니면 입주둥이가 조금 납작하다 뭐 그런 예시들을 해서 이런 수식들을 다 뽑아내고 이런거를 수식으로 다 만들어 가지고 사람이 생각하는 대로 구별을 했어요 그래서 이제 일반적인 예시들이나 그런거에서는 잘 됐었지만 이제 너무나 사실 다양한 고양이들이 있을 수 있고 너무나 다양한 배경이나 다양한 자세들이 있을 수 있기 때문에 뭐 고양이가 한 손으로 귀를 막을 수도 있는 상태이고 이렇다 보니까 이런 사진을 사람이 생각하는 방식으로 이제 수식을 짰을 때 안 되는 경우가 되게 많았어요 그래서 이제 그게 수식의 한계라고 했을 때 왜냐하면 뭐 웬만한 거엔 다 되지만은 이런 좀 특이한 케이스는 안 된다.
근데 사람들은 아무리 고양이가 자기 귀를 긁고 있어도 고양이라는 걸 알잖아요 그래서 이제 사람이 생각했을 때 더이상 95%로 만족할 수 없다.
사람은 99% 할 수 있는데 그러면 사람이 생각하는 방식대로 이걸 풀어야 되지 않을까 더 이상 수식적으로 풀지 말고 해서 생긴게 이제 이 Deep Neural Network 이제 수식적인 아니라 오히려 경험 기반 아니면 패턴들을 스스로 찾아내는 방식으로 해서 사람 두뇌가 신경망에 생긴 대로 그런 방식으로 이제 배우자 해서 생긴게 Deep Neural Network 이라고 생각하실 수 있습니다 그래서 이제 이 예시를 보면은 우리 머리해를 보면은 아주 간단하게 저는 뭐 Neuroscientist 가 아니니까 이제 콩콩자로서 봤을 때 저희가 알아야 될 아주 기초적인 것은 우리 두뇌는 뭐 아까 봤던 그 그림을 조금 더 zoom in 하자면은 크게 두가지 Purpose 가 있어요.
계산을 하는 이 Neuron과 Neuron과 Neuron의 사이를 연결해주는 이런 Neural Link 들이 있겠죠
그리고 결국 다시 말씀드리자면 계산하는 것과 이 계산하는 것에 대한 연결고리들이 다 연결되어 있죠.
그래서 연결 안된 것들도 있고 연결된 것들도 있고 예를 들어서 어떤 자극을 받았을 때 어떤 것들만 연결된 것들이 특별하게 켜지고 아니면 어떤 것들은 켜지지 않고 해서 이것은 고양이다 하면은 특별한 것들이 쫘쫘쫘쫘쫘쫘 켜져 가지고 고양이라고 생각하고 강아지를 봤을 땐 또 다른 것들이 켜져 가지고 강아지다 하는 그런 1990년대에 그런 연구들이 되게 많았어요 그래가지고 이제 공학자들이 이런 사람 머리가 어떤 특정 부분들이 켜졌다 꺼졌다 그 특정 부분들이 연결된 것들을 이제 수식적으로 계산을 해보자 그런 것을 한번 모델을 해보자 해서 생긴 것이 이게 딱 아까 비슷한 글인데 모든 계산하는 것과 계산하는 것들의 연결고리들 다른 계산한 것들이 있을 수도 있고 그거하고 또 연결고리들이 있고 이런 모델을 이제 수식적으로 표현을 하자면 모든 머신러닝과 딜러닝에 시작하는 예시의 공식에는 이런 다이아그름으로 많이 보이죠 이제 아까 계산하자는 그 뉴런이 이거고 뉴런들끼리 연결해주는 게 링크들이 이제 이거에요 근데 이제 중요한 것이 여기서는 계산하는 것이 여기 있고 그 다음 인풋들이 뭐가 연결되어 있는지가 있고 이제 그 연결된 인풋들이 얼마나의 중요성이 있냐 예를 들어서 고양이는 귀가 뾰족하다는 정말 중요한 웨이트가 있을 수 있으니 0에서 1을 사이에 쓸 때 얘는 0.9라고 할 수 있고 예를 들어서 근데 코 얘는 만약에 코에 있는 부분이라고 해볼까요 코에 있는 부분은 사실 고양이 될 수 있고 강아지 될 수 있으니까 얘는 그렇게 중요하지는 않아 예를 들어서 얘는 0.4 그리고 뭐 얘는 이제 등에 있는 무늬 무늬들인데 얘는 고양이가 좀 더 특별하게 있으니까 이 인풋은 웨이트를 조금 더 크게 해서 이런 인풋들이 이런 인풋들이 왔을 때 각자의 웨이트를 이제 스스로 튜닝을 해서 결국 이걸 계산을 해요 이걸 계산을 했을 때 고양이 뾰족한 귀가 좀 대충 있었고 코도 좀 있었는 것 같고 등꼬리도 좀 있는 거니까 웬만하면 대충 이렇게 보니 이 threshold 어느 정도의 계산이 된 합이 맞는 것 같다 라고 하면 얘가 이제 고양이다 아니면은 그 고양이가 아니다 라고 할 수 있고
예를 들어서 뭐 강아지 인풋이 왔다고 할까요 강아지에서 귀가 조금 더 동그래요 그리고 이런 패턴들이 없어요 그러면 이제 이 인풋이 안 들어오고 이 인풋이 안 들어오니까 얘가 이 합을 했을 때 합을 집어 넣었을 때 숫자가 더 적겠죠 그럼 이제 threshold가 켜지지 않고 얘는 여기 있으니 얘는 그 output을 하면 되고 얘는 이제 고양이가 아니다 아니면 강아지다 라고 그렇게 나올 수 있고요 이런 전반적인 인풋과 인풋의 중요성과 그거를 계산하는 걸 해서 얘가 이제 어느 정도까지 계산된 그 합이 켜지니 안 켜지나 해서 나오는 output을 이제 이런 다이그램을 perception이라고 되게 많이 표현합니다 아까 그 분야에서 봤던 그림하고도 봤을 때 비슷한 예시라고 했었죠 이 그림과 이제 되게 비슷한 것을 이제 수직적으로 표현을 하자면 그렇게 나온 거구요 그러면 이제 정말 신기한 게 있는데 자 이제 그러면은 사람의 두뇌를 이렇게 우리가 모델로 수학적으로 접근했다고 하면은 정말 그 정말 뭐라 해야 되지 엄청난 제안을 한 거잖아요 사람 두뇌 엄청난 복잡한 두뇌를 우리가 수직적으로 뭔가 모델을 해볼 수 있겠다 따라할 수 있겠다 근데 그러면 따라할 수 있으면 간단한 예시부터 될 수 있어야 되겠죠 그래서 이제 어 사람들이 이제 그 로직 같은 것들을 검증을 할 때 이제 Boolean들을 많이 테스트를 하는데 Boolean이 이제 뭐 로직 같은 거 할 때 이런거 end, or, nor 이런 펑션들을 하는 거거든요 그런 펑션들이 뭐냐면은 예를 들어서 인풋 두개가 있을 때 뭐 output x가 뭐 예를 들어서 우리가 end를 하고 싶다 그러면은 x, y가 input이라고 하면은 그 end라는게 결국 두 input이 둘다 x1 x2라고 생각할게요 그냥 input이라고 쉽게 하고 얘는 그냥 out이라고 하고 얘네가 둘 다 x1 x2가 둘 다 켜져야지만 output이 0이야 되고 예를 들어서 한개라도 켜지지 않으면은 다 0이야 된다 이게 이제 end야 되는 거겠죠 그리고 뭐 반대로 이제 or 같은 걸 할 때는 한개라도 켜지면 되는 거니까 이런 output이 있을 거구요 그래서 input에 따라서 어떤 output이 나오냐 이제 이런 로직을 사실 이제 컴퓨터나 그런 거에서 이제 제일 로우 레벨로 가보면은 이제 아 이런 펑션들을 많이 표현을 하는데요 이제 사실 어 수직 아까 그 perceptron으로 이제 우리 뇌를 기본적인 모델로 수직적으로 접근했을 때 사실 컴퓨터 로우 레벨 같은 로직도 할 수 있으면은 이제 첫 단계를 검증했다고 할 수 있겠죠 그래서 이제 사람들이 ok perceptron 모델로 한번 컴퓨터들도 할 수 있는 이 불륜 로직을 한번 검증해 보자 그럼 우리도 이 예시를 한번 같이 해보죠 여기가 이제 input이에요 input x, y 가 있고 우리가 원하는 것은 and 그러면 이제 얘네가 아까 봤던 input이면은 얘네가 wait고 얘네가 sum 그 계산을 하는 애고 이제 output 얘가 어떻게 정말 and 처럼 나올까요?
를 보는 건데 예를 들어서 input이 색깔을 바꿔 볼게요 input이 얘가 0 이라고 하면은 이제 0 1로 해볼게요 그러면은 0 곱하기 1, 얘는 1 곱하기 1, 그리고 얘네 둘을 더하면은 0 더하기 1 그리고 얘가 이 숫자가 threshold에요 이 input 두 개가 결국 그 threshold 2 보다 크냐 이 threshold 보다 크냐 크면은 켜지는 거고 안 크면은 이제 켜지지 않는다는 거죠 근데 이 0 1 이었을 때는 그 2 보다 적으니까 켜지지가 않겠죠 그러면은 이제 테이블을 한번 만들어 볼게요 00 일 때는 당연히 안 켜질 거고 01 때도 1 밖에 안 되니까 켜지지 않고 10일 때도 켜지지 않을 거고 11을 접었을 때 내가 1, 얘가 1, 그러면은 1111 하면은 얘가 이제 2 얘는 켜지죠 어 아까 이 perceptron 모델로 했을 때 and 예시는 검증이 됩니다 왜냐면 이 테이블이 아까 저희가 얘기했던 테이블과 똑같이 나오니까 그러면은 반대로 다른 예시를 해볼게요 이번에는 저희가 or function 로직을 해볼게요 or 로직이 이제 밑에 있는 애 밑에 있는 애를 볼 거니까 이걸 잠시 치우고 자 똑같이 해볼게요 얘가 다시 input, weight 얘가 sum, 그리고 threshold 그러면은 아까 다시 x1 plus weight 1 plus y, x1입니다.
y하고 weight 2가 결국 threshold보다 크냐 크면은 켜지고 안크면은 켜지지 않고 threshold는 여기서는 1이네요 그러면은 예를 들어서 내가 아까처럼 처음부터 0, 0 그러면은 0, 1, 0, 1, 얘네를 더하면은 0, 0, 그러면 이제 0은 당연히 1보다 크지 않으니까 얘는 켜지지가 않고 반면에 이제 0, 1 해볼게요 0, 1 하면은 바뀐다가 여기밖에 없겠죠 그러면은 1 곱하기 1, 0, 1 그러면은 0 더하기 1은 1하고 똑같으니 0, 1 input이었을 때는 켜지고 그 다음 1, 0일 때도 켜질 거고 나중에 1 input이 둘 다 1, 1일 때도 얘는 1, 1 켜지고 1, 1, 1, 1 해서 2.
2는 1 보다 커지니 얘도 켜지죠 어 그러면은 얘도 all logic function에 포함이 되네요 얘도 검증이 됐고 자 지금 다시 생각해 보자면은 예시를 풀었으면 이게 이제 얼마나 큰 발견했는지 그때 그때 사람들이 풀었을 때 검증했을 때 얼마나 큰 로직이었느냐 하면은 아까는 제가 설명 다시 한 발짝 불러서서 우리가 처음에 접근했을 때는 수식적으로 풀었던 문제들이 안 되기 때문에 두뇌처럼 모델해서 수식을 해봐서 한번 풀어보자 근데 이제 두뇌처럼 모델한게 이제 정말 되는지 검증을 해야 되니 첫번째 검증한게 이제 이 Boolean 로직으로 검증을 한건데 이제 and, or 그리고 얘는 이제 nor 인데 얘도 결국 예시를 한번 해보세요 그러면은 될겁니다 그러면 이제 사람들이 어 그럼 진짜 두뇌처럼 이렇게 우리가 모델을 하면은 모든 로직을 다 할 수 있는건가 그리고 로직을 이제 다 할 수 있는 것을 만들면은 계산비가 컴퓨터가 되고 컴퓨터가 정말 다양한 프로그램을 돌릴 수 있듯이 로직들을 다 이제 크게 크게 붙이고 붙이고 붙이다 보면은 정말 복잡한 계산비로 할 수 있게 되거든요 그러면 이제 정말 고양이를 인식할 수 있고 다른 것들도 할 수 있게 돼요 이제 이 로직들만 될 수 있다면 그래서 이제 사람들이 막 엄청 신나서 어 이게 가능성이 있구나 했는데 이제 한가지 문제가 있었죠 이 Perceptron 모델로는 아무리 사람들이 많이 도전을 해봐도 X, or 이라는 로직이 안됐어요 X, or 이라는 로직이 어 한개만 켜졌을 때 켜져야 되는 거거든요 그래서 00일 때는 켜지지 않고 11일 때도 켜지지 않는데 01 얘네가 다를 때만 켜지고 10일 때도 켜지고 이것을 아무리 다양한 방식 아무리 다양한 weight를 줘도 이 로직을 나올 수 있게 모델을 할 수가 없었어요 그래서 사람들이 음 어떻게 해야 이 로직을 할 수 있을까 이 로직을 해야 조금 더 복잡한 계산들을 할 수 있고 정말 뭐 다양한 계산기나 아니면 컴퓨터 프로그램 같이 이제 좀 복잡한 계산들을 할 수 있을텐데 그래서 사람들이 고민을 하다가 나온게 이제 Multi-Layer Perceptron 결국 이제 한개로 하는게 아니라 이제 뭐 사실 사람들도 그 아까 링크 한개만 있는게 아니라 링크들이 여러개 서로서로 복합되어 가지고 이제 계산을 하게 되는 거잖아요 그래서 다양한 사람들도 생각하게 된게 Perceptron이 아까 그 한개 한개 그림이었죠.
input들과 weight들이 있어서 sum을 해서 이게 켜지나 안켜지나 이거 한개가 Perceptron인데 이 Perceptron을 여러개로 이제 묶는 거에요 여러개로 묶어 가지고 하니까 더 다양하고 복잡한 계산을 할 수 있다는 거죠 그래가지고 얘는 정말 중요해요 얘가 Multi-Layer Perceptron을 줄여서 MLP 라고 이제 많이 사람들이 약자로 부르는데 얘가 이제 사실 딥러닝 전에도 훨씬 쉬운 모델이면서도 정말 많은 것들을 할 수 있어요 MLP로만 해도 우리가 봤듯이 지금 불리한 로직들도 사실 다 커버할 수 있기 때문에 얘로 간단한 이 Multi-Layer Perceptron 우리가 지금 이 생각하는 input들하고 weight만 줘가지고 켜지나 안켜지나 하는 걸로만 해도 많은 문제들을 풀 수 있기 때문에 MLP는 꼭 기억해 두시는게 좋습니다 그리고 이것도 아까 한번 예시로 직접 해보시면 좋은데 얘가 이제 XOR 이라는 거군요 다시 말씀드렸다시피 한개만 켜있을 때 켜지는 거 그리고 다 켜졌을 때는 꺼지는 거 그래서 여기서 이 input들을 한번씩 해보세요 이렇게 1, 0 줬을 때 여기 weight 따라가고 이 weight 따라가고 이 weight 따라가고 이게 계산이 됐을 때 얘가 정말 이 로직대로 나오는지 꼭 해보세요 그러면은 이제 말씀드렸다시피 이 Perceptron 결국 이제 X들 몇개가 있고 X1, X2, Xn까지 있고 이제 weight들이 있고 그 다음에 이제 얘네들을 다 합하고
아니면 계산하는 이제 그 파트가 있고 얘를 threshold로 얘가 이 중요한 값보다 크냐 체크하는 친구가 있고 그것보다 크면은 이제 output이 나오는 이걸로 이제 우리가 웬만한 Boolean 로직들은 다 됐어요 이걸로 Boolean 로직을 가능하니까 조금 더 복잡한 이런 헌트들로 할 수 있고 얘네들을 할 수 있으면 이제 정말 뭐 지금 이렇게 식으로 말하면 이게 뭐가 중요한가 라고 생각할 수 있긴 한데 얘네들을 진짜 이제 조금 이렇게 많이 많이 쌓고 쌓고 쌓고 좀 더 복잡하게 되다 보면은 얘가 좀 더 파워풀한 계산식으로 나올 수 있고 좀 더 유용한 식으로 나올 수 있어서 Boolean 로직 조그만 것들도 다 되고 걔네들을 이제 합친 것도 다 되면은 정말 복잡한 그 계산으로 할 수 있다 라는 거를 이제 사람들이 되게 신나했죠.
왜냐하면 이제 사람 두뇌로 모델 했던 아까 이 nlp가 웬만한 Boolean 로직을 다 풀 수 있다 그러면 Boolean 로직을 풀 수 있으면은 Boolean 로직이라는게 이제 컴퓨터 계산하는 거니까 다 0 하고 1 들만 있는 그런 예시들이잖아요 근데 이 세상에 있는 것들은 컴퓨터들이 다 아니기 때문에 0,1 로만 되는 게 아니라 뭐 continuous value 잖아요 예를 들어서 0,1만 있는 것을 이제 뭐 우리가 binary 아니면은 discrete 라고 나누고 얘기를 하고 이제 수학이나 그런걸 풀 때는 0,1 로만 하는게 아니라 이제 진짜 continuous value 가 있잖아요 그래가지고 그런 것들도 혹시 이 nlp 모델로 할 수 있을까 이 digital discrete 한 숫자들만 아니라 한수들 같은거 풀 때도 소숫자들 아니면 이런 continuous value 들이 될까 그래서 다시 한 번 말씀드리자면은 지금 여태까지 여기를 보시면은 어 threshold 가 그냥 딱 한가지 value 갖고 아 뭐 0 이냐 1 이냐 되게 비지널하고 binary 했던 value 들이었어요 근데
우리는 이제 그 binary 한 것보다 좀 더 continuous value 왜냐면 세상에 있는 숫자들은 이제 다 0,1 로만 된게 아니라 continuous한 숫자들이 많으니 그것도 되면은 이제 더 많은 것들을 풀 수 있으니 continuous 한 것도 할 수 있을까 라는 것을 우리가 지금 찾아 볼게요 그래서 이 perceptron 모델은 똑같이 갖고 왔어요 아까랑 근데 이제 input을 두 개만 있을 때 예를 들어서 x1은 이 variable x2 만약 이렇게 있으면은 2d 평면에서는 이제 어떤 숫자들이나 다 이제 누환적인 숫자들을 다 갖고 올 수 있잖아요 근데 우리가 예를 들어서 이쪽에 있는 숫자들만 관심이 있다고 생각해 봅시다 예를 들어서 이쪽에 있는 이 분홍색에 있는 분양은 그 수식적으로 표현할 수 있는 것을 찾고 싶어요 그렇다면은 이 perceptron이 과연 할 수 있을지가 질문이었고 우리는 이 예시를 해 보면서 될 수 있다는 것을 한번 확인해 볼게요 예를 들어서 지금은 간단하게 weight1하고 weight2를 둘 다 1이라고 정해보고 지금 그냥 input으로만 볼게요 input도 지금은 x1 x2만 있고 다른 것들 다 없다고 치죠 얘가 그러면 input x1은 1 x2는 0이라고 해 볼게요 그러면 아까랑 똑같이 그 1 곱하기 1 weight는 1이니까 더하기 0 곱하기 1 그러면 얘가 1이 나오죠 그럼 반대로 이제 얘가 되는지 해 볼게요 얘는 0,1 그러면 얘는 weight는 다시 1이니까 0 곱하기 1 더하기 1 곱하기 1 해서 얘도 1이네요 그리고 이제 여기에 있는 애도 만약에 0.5 0.5를 집어넣으면 얘도 1일 거구요 그러면 우리가 이제 지금 이 세가지 포인트들을 고르면서 얘랑 얘랑 얘랑 했을 때는 다 1이라는 것을 확인했고 결국 여기 있는 모든 숫자들을 다 컴비네이션을 해봤을 때 여기 있는 모든 무한적인 그 조합들이 다 1로 될 겁니다 그리고 이제 weight를 어떻게 조절하냐에 따라서 예를 들어서 조금 더 shift 할 수 있죠 여기는 무한적인 조합들로 그러면서 이제 이 표현을 할 수가 있게 되는 거에요 다시 얘가 왜 아까 다 그 digital binary 했던 애하고 다르냐면 이제는 그 2d 표면에서 이 모든 무한적인 숫자들로 커버할 수 있고 표현할 수 있다는 거죠 이 bound만 있는게 아니라 얘보다 더 큰거 그리고 이제 조금 더 복잡하게 생각을 해보자면 그 이렇게 비슷한 반면으로 아까는 얘를 커버했고 weight들을 아까는 1일로만 했었지만 뭐 2,2 하면 아까 이 라인이 이제 이렇게 shift가 되는 거고 예를 들어서 뭐 1 더하기 얘가 weight였잖아 얘네 둘이 근데 이제 얘네가 이제 threshold보다 크냐 했는데 얘네가 이제 weight를 만약 1에서 2로 바꿨다고 해봐요 그러면 이제 되는 숫자가 그 다 두 개로 커지겠죠 그러면서 이 라인에서 다 이 라인으로 shift가 될 수 있는 거고 아니면 weight를 뭐 negative를 줘가지고 이쪽 방향으로 truth하게 바꿀 수도 있고 그래서 이제 이 weight들을 어떻게 바꾸냐에 따라서 우리가 관심있는 그 영역을 우리가 이렇게 표현을 할 수 있어요 이 분홍색으로 캡쳐된 이 관심있는 분야들을 이제 input과 weight를 조절해서 바꿀 수가 있다는 거죠 그러면은 예를 들어서 어 재밌는 예시를 드리자면 우리가 어 뭐 인공지능은 많이 푸는 문제 아 다시 고양이하고 그 꼭 고양이하고 강아지 안한다고 해도 예를 들어서 어떤 데이터를 갖고 왔어요 데이터를 갖고 와 가지고 이 2d 표면에 플러스를 했는데 플러스를 했는데 얘네들이 있고 그 다음에 안에는 훨씬 많아요 그래가지고 우리가 관심 있는게 바깥에 있는 데는 별로 얘네들하고 안에 있는 애들을 이렇게 차별하고 싶은 함수를 만들고 싶은 거에요 얘네 있는 바깥에 예를 들어서 얘네들은 뭐 이 점하고 이 점이 예를 들어서 뭐 바깥에 있는 점들을 뭐 진짜 고양이라고 하고 안에 있는 점들을 다 강아지라고 했을 때 물론 그 고양이 강아지로 왔었으면은 이미지 디멘션으로 왔기 때문에 2d 로 바꾸기에는 좀 복잡한 계산이 들어갔을텐데 이거를 어떻게든 2d 로 압축을 시켜 가지고 플러스를 했을 때 고양이들은 다 바깥에 점들이 찍혔어요 그리고 강아지들은 다 이 안에 찍혔어요 그러면 이 함수를 표현할 수 있어야 되잖아요 나중에 왜냐면 또 새로운 점이 들어왔을 때 얘가 결국 강아지냐 고양이냐 이거를 이 boundary를 알아야지 이 boundary를 어떻게 수식으로 표현할지 알아야 되니 그걸 구별할 수 있지 않을까요 그래서 이 boundary를 어떻게 찾을 수 있을까
뭐 이렇게 물론 이렇게 다섯 가지로 이렇게 나온 거면은 딱 눈으로 봐서는 지금 우리가 수식을 세울 수 있지만은 이건 간단한 예시고 이제 정말 실제 데이터로 봤을 때는 얘가 이제 정말 3차 환경도 아니고 진짜 막 몇백 디멘션에 나올 수 있는 데이터로 표현이 돼요 그럼 이제 사람이 그거에 대해서 어떻게 상상도 할 수도 없고 수식을 세울 수도 없는데 이제 그런 디멘션들을 러닝으로 풀 수 있다는 거죠 근데 이제 지금은 예시로 간단하게 2d 로만 볼게요 이것을 아까 우리가 봤던 그 mlp 로 이 간단한 한수를 표현할 수 있을까 근데 지금 이제 재미있는게 이 mlp 한개로 지금 우리는 이 라인을 그릴 수 있는 거 그 이 라인 위에 있는 것을 그릴 수 있는 거를 지금 봤잖아요 그러면 이 mlp 한개를 저장해요 저장한다는게 얘를 갖고 오고 첫번째 그리고 걔가 아마 아까 봤을 때 이쪽이었겠죠 근데 이제 위에가 아니라 이제 밑에로 이거를 플랩한거에요 밑에만 이렇게 커버하게 얘가 이제 얘가 된거겠죠 그리고 또 한애를 데려와요 다른 mlp 는 이제 얘만 되는 mlp 를 갖고 와요 그리고 또 한애는 얘만 갖고 오네 다른 애는 얘만 갖고 오네 이제 무슨 얘기가 되는지 알겠죠 결국 이 mlp 한개 지금 1번 2번 3번 4번 5번 다 각자의 한가지 함수들만 이렇게 갖고 오네 그렸어요 그리고 걔네들을 다 같이 아까처럼 and 함수를 얘도 아까 우리가 뭐라고 했어요 모든 mlp 는 Boolean 로직들을 다 할 수 있다고 했었죠 그러면은 이 한가지 함수들을 했던 것들을 그냥 and 함수로 뭍혀가지고 하니까 얘가 우리가 관심있는 이 부분을 캡쳐할 수 있는 수직이 나온거죠 mlp 로 수직화 된거에요 이 영역을 구할 수 있는 mlp 가 나온거죠 그래서 얘가 정말 획기적이었던게 더이상 0,1 로 로직 테이블만 한게 아니라 이 real, continuous한 숫자들도 복잡 예를 들어서 강아지들이나 고양이 이거를 아니면 뭐 암환자냐 암환자가 아니냐 플랫했을 때 이렇게 영역을 엄청나게 복잡한 환경에서도 얘네를 구별할 수 있는 mlp 를 생성할 수가 있다 하면서 이제 그때부터 사람들이 와 엄청 무글무글 묵직하겠구나 머신러닝으로 아니면 mlp 로는 많은 것들을 모델하고 캡쳐를 할 수 있겠구나 하면서 이렇게 이제 첫번째 렉셔가 마무리가 됩니다 근데 이제 오늘을 요약하자면 아 슬라이드가 조금 더 있구나 그 얘 만 아까 했던 애가 얘가 이제 이 부분만 된거고 조금 더 복잡하게 뭐 얘도 만들고 싶다 하면은 그럼 얘를 또 붙이는 거에요 예를 들어서 얘 mlp 가 얘만 했다가 얘 mlp 는 이 부분만 하는거고 또 얘를 이제 all로 붙여요 그러면 얘가 이거를 다 캡쳐할 수 있는 함수가 되는 거죠 더 복잡해지게 아까보다는 더 복잡하고 근데 이제 이렇게 해가지고 계속 쌓아 나갈 수가 있다는 거죠 예를 들어서 사람이냐 사진을 갖고 왔을 때 얘가 사람이냐 아니냐 같은 것들도 결국 이런 mlp 를 더 복잡하게 쌓아 가지고 내가 사람이냐 얘가 말이냐 그런 것들을 이제 구별할 수 있는 로직이나 mlp 가 이렇게 생성되고 있을 수 있다는 것을 이제 한번 이해가 되시는게 정말 중요하다고 생각합니다 여태까지 아까는 진짜 처음에 제가 말씀드렸을 때는 이제 딥러닝이나 머신러닝은 input output box다 input이 줬을 때 예를 들어서 input 이미지가 들어갔습니다 그럼 output이 cash냐 not이냐 이거를 구별할 수 있는 것 output이라고 했었는데 이 안에 어떻게 들어가는지 몰랐잖아요 근데 이제 우리가 배운 것은 아까 perceptron 으로만 시작했다가 이 perceptron 들을 여러 개로 묶어 가지고 multi-layer perceptron을 하니 모든 boolean function을 커버할 수 있었고 boolean function들 뿐만 아니라 0,1 로만 되는 로직이 아니라 이제 실제 2d나 3d나 그런 continuous한 숫자들도 우리가 분리할 수 있다 하면서 continuous한 숫자들도 우리가 이제 categorize 하거나 classify 하거나 나눌 수가 있다 라는 것을 점을 찍어 주시면 좋겠습니다 더 이상 이게 black box가 아니라 이제 어 이런 아이디어로도 로직을 더할 수 있고 수직적인 표현들도 할 수 있구니 이제 그런 것들을 좀 더 복잡하게 하면 사람 인식하는거나 말을 인식하는구나 가 가능하구나 더 이상 마술이 아니라는 것을 이해했으면 꼭 짚고 넘어왔으면 좋겠네요 그러면 이제 아까 말씀드렸다시피 정말 처음에는 인기 많았던게 이제 M-list라고 이제 사람이 옛날에 사람 숫자가 쓴 것을 컴퓨터가 스스로 인식할 수 있느냐 그리고 여태까지 그거가 이제 왜 개발하게 됐냐면 미국에서 Bell Labs라고 제했는데 옛날에는 내가 통신이나 그 전쪽에서 정말 미국 연구를 선도하던 데였는데 여기서 이제 미국 옛날에는 우표를 정말 많이 썼었고 이메일이 없었잖아요 그래서 이제 이 우표를 사람들이 다 결국 이제 숫자를 읽어야 되는데 사람들도 실수를 하고 우표도 너무 많으니까 얘는 무조건 컴퓨터를 해야 되겠다 어떻게 사람이 쓴 글자를 컴퓨터 카메라로 갖고 스스로 사람보다 더 정확하게 인식할 수 있겠느냐를 미국 정부에서 Bell Labs한테 돈을 엄청 던져주면서 문제를 풀려고 했어요 근데 그때 시기가 막 AI하고 Perceptron 연구 쪽에 막 관심을 받던 때여서 그때 이제 이 M-list라는 데이터셋을 그러니까 사람 글자를 써 가지고 문제를 푼 데이터셋이 때가 정말 인기를 많이 받았었는데 결국 얘는 이제 2D 이미지죠.
2D 이미지라는게 이렇게 평면에서 나온 그림이고 얘네들이 다 이제 픽스 한개 한개씩을 읽었을 때 애가 2냐 3이냐 그런거를 구별하는 것을 복잡한 MLP로도 풀 수 있었구요 여기에서는 이제 꼭 2D가 아니어도 3D나 이렇게 다양한 3차원에 있는 모델들도 구별을 할 수가 있다 예를 들어서 그 숫자 2 같은 것들은 다 여기에 몰리고 숫자 3 같은 것들은 다 여기에 몰리고 숫자 4 같은 것들은 다 여기에 몰리고 이렇게 구별할 수 있고 이렇게 데이터 왜냐하면 이제 4가 이렇게 생겼다는 게 아니라 4로 생긴 데이터들을 압축을 하다보니 얘네들은 여기로 모이고 3 같이 생긴 데이터들이 다 모이니 얘네들은 다 이렇게 모이고 해가지고 얘네들을 이렇게 분리시켜서 아까 우리는 MLP들로 이 boundary만 뽑아낸거죠.
구별할 수 있는 boundary를만 이런 문제도 풀 수 있었다는 것을 말씀드렸다 싶은 거고 우리는 또 AI랑 ML 같은 걸 하면 많이 푸는 문제가 최적화하는 문제, 미니멈이 어딨냐, 아니면 가장 효율적인 답이 해결이 솔루션이 뭐냐 하는 건데 그런 거를 풀려면 일단 이런 것들을 모델부터 할 수 있어야 되겠죠 좀 복잡한 2D가 아니라 3D, 4D, 5D 같은 환경에서도 얘네가 어떻게 boundary가 생기고 거기에서 미니멈 포인트가 어디에 있느냐를 아는 것들도 머신러닝으로 캡쳐할 수 있는거고 아니면은 주식 같은 패턴들도 주식과 같은 것들도 캡쳐할 수 있다는 것들을 예시들로 말씀드리고 싶었던 겁니다 이번에는 세 번째 강의를 시작하겠습니다 오늘 강의는 이제 MLP의 예시를 보게 될 건데요 저번에 말씀드렸던 MLP가 머신러닝의 제일 시작적으로 배웠던 게 Perceptron의 예시였죠 Perceptron이 이제 사람 뇌를 모델 삼아 가지고 계산하는 뉘런이 있었고 여기에서 연결된 컬렉션들이 있을 거고 이것을 연결된 부분과 여기에 중요성들을 기억해서 그거를 총 계산을 해서 나오는 거에 대해서 결정 내리는 게 간단한 Perceptron 모델이라고 말씀드렸는데 Perceptron들을 여러 개로 묶을 수 있으면은 더 복잡한 것들을 할 수 있다고 말씀드렸죠 그게 이제 MLP, 여기가 이제 Multi Layer, 여러 개가 섞인 Perceptron이라고 해서 MLP라고 불리는 건데요 오늘은 이제 MLP를 직접 공식으로 세워보고 간단한 예시문제를 풀어보는 것을 한번 같이 해볼 겁니다 그런데 이제 시작하기 전에 딥러닝을 잘하는 방법에 대해서 제가 이전에 말씀드린 게 두 가지가 있었다고 했었죠 첫 번째는 최신 내용들을 알고 최신 알고리즘을 쓰면은 무조건 성과가 좋아집니다 우리가 딥러닝하고 이런 것을 지금 배우고 있는 이유가 뭐겠어요 당연히 우리가 취직을 해서도 저희가 어떤 AI나 ML 부서에서 일을 하다 보면은 저희에게 과제가 던져지겠죠.
다음 주식을 가장 잘 계산하는 아니면은 예측할 수 있는 부동산이던 주식이던 아니면은 뭐 병원에서 일하면은 이제 암 사진들을 몇 개 보았을 때 이거를 예측할 수 있는 그런 최신 알고리즘을 적용해서 현재 한 것보다 내가 들어왔을 때 더 좋은 성능을 보여줘야지 이제 저희가 돈을 받고 월급을 받고 잘 해고당하지 않고 잘 일을 할 수 있는 거잖아요 그래서 결국 딥러닝 하면은 사람들이 제일 많이 생각하는 게 성과 무조건 성과를 얘기하는 건데 이제 물론 최신 알고리즘을 쓸수록 이제 성과가 더 올라간다는 거죠 그래서 최신 것을 배우는 게 중요하고 두 번째 딥러닝을 잘하는 거에 대한 두 번째 방법은 이제 최신 것을 쓰는 것과 비슷하게 좋은 툴 예를 들어서 라이버리 같은 것들을 잘 사용하는 방법이라고 하셨죠 아 이제 예를 들어서 딥러닝 모델을 짜고 검증하고 디버깅을 할 때 이제 여러가지 필요한 도구들이 있을 거예요 그게 뭐 이제 시각화 하는 것이던 디버깅 하는 것이던 저장을 하는 것이던 아니면 데이터들을 압축하는 것이던 일일이 우리가 다 직접 짤 수 있고
뭐 한 40년 전에는 이제 정말 대단한 콩공자 분들이 뭔가 다 직접 짰겠죠 근데 이제 우리는 더 이상 그런 시대 사업을 하는 게 아니고 저희는 이제 빨리 빨리 개발하고 빨리 빨리 돈 버는 시대다 보니 다른 사람들이 그런 툴들을 개발했던 것을 잘 가져오는 게 저희가 딥러닝을 잘하는 두 번째 방법입니다 최신 알고리즘 두 번째는 아 다른 도구들 라이버리들이 뭐가 있는지 알고 잘 사용하기 근데 이제 여기에서 사실 세 번째가 제일 중요하다고 생각하는데 이번에 말씀드린 게 이제 직관을 사실 키우는 거라고 생각합니다 뭐 이거 두 개는 이제 그냥 가장 최근에 있는 것들을 잘 베스어 써 오자라는 내용이고 세 번째가 이제 내가 얼마나 잘 알고 있느냐가 중요한 건데 직관에서는 이제 어 특히 어 딥러닝이나 인공지능 같은게 워낙 데이터 같은 걸로 갖고 좀 약간 어 완전 수학을 푸는 것보다는 약간 예술이라는 표현을 되게 많이 써요 사람들이 예를 들어서 이제 파레미터 튜닝이나 아니면 어떤 데이터들이 정말 중요한 건지 그런 약간 직관 같은 게 좀 많이 아니면 운이라고 할 수 있긴 한데 많아서 어쩔 때는 되고 어쩔 때는 안 되고 어쩔 때는 엄청 뛰어난 성능을 보여주고 어쩔 때는 그렇게 좋지 않은 성능을 보여주고 그래서 그런 이제 직관이 참 중요해요 제가 생각하기에는 저는 워낙 시각적인 사람이어 가지고 시각적으로 모델이나 데이터를 보면서 이해하는 게 정말 중요하다고 생각하거든요 데이터던 모델이던 그래가지고 이제 어 저희가 강의를 할 때 여러 방법을 생각해 봤는데 이 시각, 직관을 키우기 위해서는 이제 이거를 시각화 할 수 있는 것들을 좀 많이 중요하다고 생각해서 이번 강의 내용을 할 때 그림이나 다이어그램이나 아니면 이제 뭐 그 플랏 같은 것들을 최대한 많이 보여주면서 넘어가면서 직관을 이제 키우는데 도움드리자고자 생각했습니다 근데 이제 지금 현재 CMU에서 하는 딥러닝 영상 말고도 유튜브에서도 제가 정말 꼭 추천드리고 싶은 게 있습니다 그 인공지능하고 머신러닝 수업을 들었다 아니면 이쪽에서 뭐 그 수업을 가르쳤다 하면은 웬만한 사람들이 한번쯤은 들어봤을 채널인데요 3Blue1Brown이 지금 미국에서 박사 하시는 분인데 이 친구가 시각화해서 만드는 예시들을 정말 잘 해놨어요 예를 들어서 지금 여기 보이는 게 그 옛날에 되게 많이 보였던 그 숫자로 손으로 숫자를 썼을 때 이미지 인식을 하는 그런 문제를 푸는 건데요 이제 사진으로 컴퓨터가 이 숫자를 어떻게 읽는지 번호를 어떻게 읽는지 이 각자 Perceptron과 Neuron으로 한 개 한 개에서 어떻게 맵핑이 되는지 그리고 그렇게 Weight를 어떻게 갖고 어느 정도 Weight가 계산됐을 때 언제 켜고 끄고 하는 그런 예시를 지금 보여주고 있는 거거든요 근데 예를 들어서 그 2D Matrix에서 나온 것을 사실 이제 우리가 모델로 집어 넣기에는 2D보다는 이 1D Vector로 아까 사이즈가 28x28이 간단한 이미지 사이즈 아주 초기적인 이미지를 가져왔을 때 2D로 쓰는 것보다 이 1D로 압축시키는 게 계산하는 데 훨씬 편해요 왜냐하면 우리가 이 모델로 집어 넣어야 되니까 이 모델이라는 게 그 뭐 CNN이나 Deep Learning 같은 거에 쓸 때 그 흔히 쓰는 모델 형태라고 할 수 있죠
그리고 이 Output은 결국 숫자를 썼을 때 0에서 9 사이 숫자야 되지 않겠습니까 그래서 28 픽셀이 여기 들어갈 수 있다니까 픽셀이 28개 그리고 밑으로는 픽셀이 28개 그래서 28 곱하기 28 해서 이거를 1D Vector로 나열을 하면 784에 대한 X Input이 784라는 사이즈를 가질 수 있죠 그거를 이 X Input을 이 Y Output은 결국 10개 숫자로 맵핑을 할 수 있는 이 모델을 배워야 되고 이 모델 간에 연결된 선들 이 Weight를 어떻게 배우느냐가 이제 이 문제인데 이거를 제가 다시 꺼낸 이유가 이 비디오 채널을 하루에 한 번씩 아니면 일주일에 한 번씩 시간을 꼭 내셔서 좀 보시면은 정말 도움이 많이 될 겁니다 왜냐하면 이 계산, 결국 이제 이 모델이 어떻게 트레이닝 되는지 시각화할, 그러니까 결국 더 이상 이게 어 정말 그냥 어떻게 되는지 시각화를 꼭 이해를 하셔야지 나중에 그 실제로 실습으로 코딩 할 때도 그냥 아 예시 코드를 복사 붙이게 해서 되는구나 가 아니라 이렇게 뒤에서 코딩 밑에서 어떤 일들이 일어나고 있는지 이런 거를 좀 봐야지 아 정말 도움이 많이 되니 이 유튜브 채널은 꼭 추천드립니다 벌써 여기 11백만 뷰어스가 들어와 있는데 정말 좋은 컨텐츠니 꼭 한번 보시길 바랍니다 그러면은 이제 다시 치과를 키우기 위해서 추천드리고 있고 오늘은 mlp 푸는 예시로 시작을 해보겠습니다 자 저희가 그 지난번에 배웠던 것을 이제 한번 요약해 볼게요 중요한 것만 찍고 갈게요 지금 우리가 딥러닝이나 머신러닝 하면은 주로 흔히 이제 요약해서 그릴 수 있는 다이어그램인데요 여기서 중요한 것들이 딱 세가지가 있습니다 중요한 거 첫번째 input 우리가 무엇을 집어넣느냐 예를 들어서 아까 예시로는 숫자 9라는 이렇게 사진을 딱 집어넣었을 때 얘는 28 픽셀과 28 픽셀에서 이 input size x1부터 x2 x3 해서…
x 784가 되는 거겠죠 28 곱하기 28이 784니까 그래서 이미지 9를 여기 쫙 1줄로 나열했어요 모든게 한개가 픽셀 한개 픽셀 한개가 가딕들이고요 그러면 얘가 784가 되고 두번째로 중요한 것은 이제 output 사진을 집어넣었어요 사진이 사실 컴퓨터가 봤을 때 얘가 9인지는 모르잖아요 우리가 눈으로 봤을 때는 알 수 있지만 얘를 그냥 픽셀로 받았을 때는 컴퓨터가 얘가 9인지 0인지 몰라요 대신 우리가 원하는 것은 이 그림 784 사이즈의 그림이 들어갔을 때 output이 0인지 1인지… 해서 9인지 이 숫자 중에 한개는 output을 얘가 설정해 줘야겠죠 얘가 input과 output이 있고 이제 제일 중요한 것은 우리가 input을 받았을 때 원하는 output으로 맵핑 해줄 수 있는 이 모델 모델이 뭐냐가 관건인데 결국 모델의 중요한 한수는 제가 이제 한수들을 쓰기 시작해볼게요 input으로는 이제 x 로 많이 불러고요 저희가 output으로는 우리가 y 로 많이 불러고 그 다음 이제 이 중간 모델에서 이 연결점의 중요성을 우리가 w, weight로 많이 표현을 합니다 자 그러면은 우리가 이 mlp 모델을 세웠을 때 저희가 지난번에 찍고 넘어갔던 게 이 mlp를 했을 때는 모든 Boolean Function이나 로직을 할 수 있었다고 했었죠 예시로 들면 and, or, than 그리고 한계로만 perceptron 한개 예를 들어서 perceptron 한개가 이렇게 생겼었죠 x 몇개를 집어넣고 weight가 있고 얘를 계산한 애가 있고 얘를 이제 그 어느 숫자까지가 되는 이유는 켜지나 안 켜지나 해가지고 나오는 output y를 봤을 때 이 perceptron 얘가 한개가 perceptron이고 이 perceptron 한개로는 logic and or than 다 할 수 있었어요 다만 이 perceptron들을 몇개를 묶으면은 이제 x, or 같은 다양한 로직들도 할 수 있었다고 했었죠 그 Boolean 로직에 대해서 다시 말씀드리자면은 input1, input2 가 있을 때 얘가 뭐 둘이 조합이 어떻게 켜졌을 때 output이 켜졌느냐 안 켜졌느냐 이거를 얘기해주는 table 뭐 우리가 예를 들어서 and 로직을 보고 싶다 하면은 두개 x1 x2가 둘 다 켜져야지만 y가 켜지는 예시니 얘는 1, 0, 2, 3개에서는 다 켜지지 않고 1, 1 했을 때만 켜지는 이런 로직을 이제 mlp로도 다 할 수 있었다 했었고 또한 continuous function으로도 이 로직은 0, 1 로만 하는데 0, 1 뿐만 아니라 저번에도 그때 2d plane에서 x1 x2 해가지고 0, 1 이렇게 나눌 수도 있었다고 했었죠 그리고 이렇게 mlp로 한게 이 선을 그을 수 있으면은 저번에 정말 신기한 예시가 예를 들어서 뭐 이런 함수 같은 것들도 이런 조합으로 예를 들어서 이 선 한개가 perceptron 한개로 적용될 수 있고 이 라인 함수도 세번째 perceptron, 세번째로도 세번째 perceptron 해서 이 라인들을 다 구할 수 있고 이 라인들을 반꺼번에 and 라는 로직을 같이 쓰면은 이 2d space에 원하는 함수도 원하는 이 영역도 구할 수 있는 그 예시도 한번 보여드렸었죠 그래서 mlp는 정말 다양한 것들을 다 할 수 있다 Boolean 로직이던 우리가 원하는 함수던 아니면 그 함수들을 다 모아가지고 특별한 영역을 표현하는 것도 mlp로도 다 할 수 있었다는 것을 저희가 지난번에 배웠어요 그러면은 저희가 이번에 가면서 짚고 나갈 것은 이 original perceptron 모델 input, 원하는 output 그리고 그걸 mapping 해줄 weight가 있는데 저희가 있다는 것만 사실 배웠었지 이제 사실 제일 중요한 이 weight 이 weight를 어떻게 구하느냐가 이제 우리가 조금 고민을 봐야 될 겁니다 x 는 저희한테 주어진 거죠 문제를 풀 때 아까도 예를 들어서 이게 들어 사진 사진이 들어야 숫자 써져 있는 사진이 들어오는데 얘가 무슨 숫자 인야를 풀어야 되는데 output은 결국 0에서 9 사이에 나오는 것인 걸 알고 input은 이 사진인 걸 주어진 거고 그래서 이 세가지 1번 x 또 우리한테 주어진 거고 output y 는 모델이 output 해주는 거니 우리가 신경 써야 될 것은 이 weight 2번 weight를 어떻게 줘야지 input이 들어갔을 때 우리가 원하는 output이 나오느냐 이 weight를 어떻게 조절하느냐에 따라서 이게 정말 효과적인 인식 딥러닝 모델이 되는 거고 예를 들어서 구글 사진을 줬는데 이 output이 나와요 그러면은 정말 쓸데없는 모델을 표현한 거죠 그러면은 바로 잘리겠죠 그래서 우리가 제대로 학습할 수 있기 위해서 이 모델을 세우고 이 weight를 어떻게 구하느냐가 있는데 첫번째 모델을 어떻게 세우느냐는 일단 정말 완벽한 모델이 먼저 주어졌다고 가상을 먼저 하고 두번째 weight를 어떻게 구하느냐 모델은 일단 주어졌다고 체크할게요
지금은 이 weight를 어떻게 계산하느냐에 대해서 들어가 볼게요 이 사진도 한번 보여드리고 싶은데 이제 그 mlp 모델 예를 들어서 input, output 그리고 이제 얘는 layer1, layer2, layer3 있으니까 얘가 말로 진짜 multi-layer가 되는 거겠죠 3가지가 있으니까 그리고 여기서 input과 layer1을 연결해 주는 weight가 있고 layer1과 layer2를 연결해 주는 weight2가 있고 근데 이제 w1이라고 쓴게 이 한 숫자만 얘기하는 게 아니라 이 것들을 다 연결해 주는 거니까 얘도 당연히 이제 벡터가 되겠죠 얘도 벡터가 되고 왜냐면 얘네들을 다 연결해 주는 숫자니까 이 벡터들을 다 배워야 하는거에요 지금 자 그러면은 이 weight들을 어떻게 배우냐 지난번에 얘기했을 때는 첫번째는 이제 우리가 원하는 영역을 있을 때 이렇게 그 때 perceptron을 나누는 방법 그 예시를 했었을 때 그때는 사람이 직접 했었죠 예를 들어서 그 2.1, 2.1, 2.1 해가지고 weight를 주고 해가지고 이쪽 분야 반대로 이쪽 해가지고 연결, 연결 end 해가지고 저번에 이렇게 할 수 있는 예시를 했었어요 근데 그때는 이 weight들을 그리고 여기서 어느 숫자가 있어야지 켜지고 하는 거를 어 사람이 이건 쉬운 예시였으니까 사람이 그냥 정해 할 수 있었는데 이제 우리가 좀 더 복잡한 예시로 가게 된다 하면은 어 사람이 그걸 생각하고 할 수가 없어요 그래서 그 weight를 이제 스스로 배워야 되는데 컴퓨터가 스스로 배우려면은 이제 반복된 시행착오로서 이 weight 값들을 이제 계속 최적화 시키고 최적화 시키고 최적화 시키다 보면은 이제 원하는 아웃풋으로 웹핑 될 수 있는 weight가 나오는 겁니다 자 예를 들어서 그거를 제가 방금 말씀드린 거를 좀 공공히 생각해 보시면은 이제 반복된 시행착오라고 제가 말씀드렸는데 그러면은 이제 착오라고 읽는게 벌써 일단 에러라는 게 있다는 거잖아요 우리가 원하는 게 있고 지금 있는 게 있고 그 두 개의 이제 그 차이점이 있을 텐데 간단하게 말씀드리자면은 이 예시가 좋겠네요 간단하게 보자면은 우리가 이 그냥 2d 표면에서 봤을 때 x1 x2 라고 하는데 그냥 어떤 variable인지 사실 상관은 별로 없어요 그냥 이 g 라는 함수가 있어요 g 라는 것을 그냥 ground truth 라는 함수라고 불러올게요 이게 실제 함수에요 우리가 원하는 함수 좀 쉽게 얘기를 해보자면은 예시를 꼭 주는게 중요할 것 같은데 예를 들어서 두가지 예시를 두가지 변수가 있는 거니까 음 음 음 음 아니예요 예시는 조금 나중에 save 하고 지금 그냥 저 그림부터 먼저 설명드릴게요 이 g of x, g가 함수고 얘는 x input을 받아요 이 함수가 이제 우리가 최종적으로 원하는 함수인데 얘는 우리가 맞출, 우리가 최대한 따라가려는 함수 모델이고 이 우리가 지금 갖고 있는 것은 이거예요 그 function f, f는 결국 x input을 받았을 때 내 현재 weight로 갖고 있을 때 나오는 y 예측을 뽑아내는 function이죠 이 function을 표현하는 게 enlp 입니다 자 다시 저희가 아까 말씀드렸던게 x input이 있을 때 x input이 이렇게 들어와요 그러면은 y output 예측이 나오겠죠 그러면은 enlp 이 모델을 결국 하는게 x 를 y 로 맵핑 시켜주는 함수겠죠 그래서 그걸 function이라고 부르는데 enlp는 즉 결국 그림은 이렇게 생겼지만 수학적으로 표현하자면 x input이 주어졌을 때 현재 weight를, 얘네가 이제 weight겠죠 function 이 두가지 parameter를 갖춘 function이 y 로 맵핑 해주는 function입니다 그게 지금 보이는 이 빨간색 선이구요 우리가 근데 이 빨간색 선이 어땠으면 좋겠어요 이 빨간색 선이 이 파란색 점하고 최대한 일치하는 걸 원하겠죠 왜냐면 이 파란색이 아까 저희가 말씀드린 그 ground truth 우리가 원하는 그 함수니까 그 모델이니까 이 사이점 이 차이에 있는 색깔이 결국 이제 error에요 우리 예측한 것과 실제 원하는 것과의 차이점 그래서 이 그 2d plane에 얘네가 다 error 이고 저희가 원하는 것은 w 를 최대한 계속 업데이트를 시키는 거죠 그래서 최적화된 w star 가 있다고 합시다 그럼 그 star 가 모든 x input일 때 예를 들어서 이 점일 때는 x1 x2 가 있고 이쪽에서 또 다른 x1 x2 가 있겠죠 그때 나오는 그 weight들과 갖고 있었을 때 그 이상 여기 있는 점이 아니라 최대한 여기로 예측할 수 있게 그러면 그 파란색 선과 일치하면 error이 0으로 되는 거겠죠 이해 되셨나요?
그래서 이제 그 원하는 라인이 있고 현재 function이 input x 와 현재 가지고 있는 w 로 예측하는 function 모델이 있는데 여기서 우리가 바꿀 수 있는 것은 w 만 계속 개선해서 w 를 개선해서 이 라인을 최대한 여기까지 끌어 모이는게 우리의 목표입니다.
자 그러면 이제 예시로 한번 가볼게요 그 주로 우리가 딥러닝에서 이제 할 수 있는 문제들이 크게 두 가지로 나눌 수 있는데 첫번째 흐리게 말하는 것은 이제 classification classification 이라는 것은 제가 이전에도 얘기 많이 들었던 뭐 사진 같은 것을 줬을 때 딥러닝 보고 어 이 사진이 고양이냐 강아지냐 를 예측하는 게 classification 이고 예를 들어서 classification 이라는게 결국 결국 output y 를 봤을 때 얘가 한정된 set에서 나오는거에요 고양이냐 강아지냐 그리고 두번째 방법이 두번째 우리 딥러닝으로 많이 풀 수 있는게 regression 이라고
어 얘는 output을 예측했을 때 infinite set이 있어요 즉 얘는 주식문제 같은걸 많이 예측하죠 예를 들어서 가격 예측하기 근데 가격을 예측할 수 있는게 얘는 이제 무한적인 그게 있을 수 있으니 이전 것을 봤을 때 아니 현재 그 여러 variable 들을 봤을 때 다음번에는 어디쯤 떨어질 수 있느냐 가격이 그런거를 이제 regression 이라고 많이 하는데 classification 이 훨씬 더 쉬워요 그래서 이 문제로 먼저 찾아 볼게요 그리고 classification 에서도 먼저 보는게 binary classification 딱 두가지만 구별하는 얘가 빨강이냐 파랑이냐 딱 두가지로만 구별하는 그 예시를 드려볼게요 근데 이제 그 좀 더 컨텍스트를 드리면 재미있을 수 있으니 아 여기는 이제 2d 라고 생각을 해 볼게요 2d 라는게 결국 x input이 x1과 x2 두가지 변수로만 이전한다는거에요.
근데 예시를 좀 더 구체적인 예시로 들기 위해서 이런 질문을 한번 해 볼게요 아 미국 대학원에 들어갈 때는 이제 뭐 TOEFL 하고 GRE 점수가 중요하죠 이거를 이제 COVID 전까지는 필수였는데 이 점수들을 갖고 예측하는 거에요 우리가 deep learning 모드를 갖고 얘가 이 점수로 뭐 MIT에 합격할 수 있었냐 아니면 불합격할 수 있었냐를 예측하는 문제를 한번 그 binary classification 으로 deep learning을 한번 풀어 본다고 해 볼게요 그러면 x1이 TOEFL 점수 x2가 GRE 점수 그리고 나오는 output y가 1-1이라고 하죠 1은 붙었다, 1은 안붙었다 얘가 1이라고 치고 이거 빨간색이니까 마이너스 1이라고 하죠 얘가 붙었다 하고 예시 질문 어떻게 input output이 뭐가 되고 하는지 이해가 되시죠?
자 그러면 이제 저희가 원하는 것은 그 일단 다 지워보고 저희가 주어진 것은 이 데이터 샘플들 밖에 없어요 그쵸 이 데이터 샘플들이라는게 결국 TOEFL 점수 1과 그 다음 GRE 점수 그리고 결국 얘가 합격했냐 안했냐 라는 이 샘플들을 갖고 있겠죠 예를 들어서 얘는 이철수 학생 얘는 뭐 홍길동 학생 얘는 뭐 다른 학생 해가지고 이 데이터들만 갖고 있어요 저희가 그러면 다음 이 데이터들로 이제 weights를 체인 시켜서 학습시켜서 이제 다음에는 새로운 학생이 들어와요 올해 아니면 내년도에 학생이 들어왔어요 내년 학생이 들어왔을 때 얘도 새로운 TOEFL 점수와 또 그 GRE 점수가 있겠죠 근데 얘가 과연 합격을 할지 안할지를 우리가 deep learning으로 이제 푸는 거에요 그러려면은 이 weights들이 이 데이터와 이 데이터를 최대한 잘 나누는 선을 배워야 되겠죠 결국 이 선이 어떻게 나오냐 를 아는게 관건입니다 잘 나누는 선이 이런 예시고 반면에 잘못 나누는 예시가 어떻게 되겠어요 우리가 w 를 잘못 학습시키면 이렇게 나눌 수 있겠죠 충분히 가능할 수 있죠 왜냐면 우리가 weights를 정하는 거니까 근데 이렇게 되면은 얘네들도 misclassified 되고 얘네들도 틀리고 얘네들도 틀리니 이 라인을 어떻게 나누냐면 이 라인은 이 라인에 대해서 조금 더 설명해 드리고 싶은데요 지금 우리가 perceptron 문제를 풀 때 여기를 한번 볼게요 우리가 항상 perceptron을 했을 때 input과 weight를 어떻게 한다 했었죠 input과 weight를 항상 곱하고 더 했었죠 이렇게 점점점점 해서 쭉 가는 건데 예를 들어서 input x1과 y1을 곱했고 그렇게 갖고 있는 것들을 여러 개를 많이 더해요 이 더한 것들이 어느 숫자까지 가면은 얘가 이제 켜지거나 안 켜지거나 하는 거였죠 이걸 좀 더 짧게 표현한다면 물론 이 형태로도 나올 수 있지만 이것을 지금 w가 w1부터 wn이 있고 x1부터 xn이 있는데 얘네들을 그냥 한계 벡터로 부를게요 w 그리고 얘는 x 벡터 그러면은 w 벡터와 x 벡터를 dot product 한게 사실 이 표현과 이제 일치하겠죠 dot product 자 이제 dot product 형태로 제가 짧게 본 이유가 이게 왜 도움이 되냐면 그림을 볼 때 dot product이 도움이 됩니다 자 여기 슬라이드를 한번 영상 끝나고도 한번 다시 직접 가셔서 한번 다시 보는 것을 추천드립니다 그 아까 perceptron 이 공식을 세웠을 때 w, x1, summation 해서 summation 해서 output이 나오는 거였었죠 자 얘가 아까 나왔던 perceptron 모델을 수식적으로 쓴 거에요 근데 우리가 perceptron 모델 output이 이렇게 되는 거니까 output이 어떻게 되죠?
얘가 1이냐 뭐 마이너스 1이냐 이거겠죠 y 는 결국 output을 predict 하는 거니까 우리 예시로는 합격했냐 파란색, 합격 안했냐 빨간색 이렇게 두가지로만 나타나죠 그래서 아까 말씀드렸던 게 얘가 binary classification으로 되는 거고 그러면은 여기 있는 점들은 다 한 클래스로 나눠지고 여기에 있는 것들은 다 두 번째 클래스로 나눠준다 하면은 이 선은 결국 얘가 0일 때 사실 되는 거겠죠 얘가 어떻게 0이 될 수 있냐구요?
다시 그 전 슬라이드로 가보면 아 여기도 또 나와있네요 perceptron에 나온 것을 그림으로는 아까 x가 들어가고 weight가 있고 얘가 summation 하고 얘가 나오는 게 activation function이 있었죠 얘가 그걸 표현해 주는 거에요 activation이라는 게 어느 숫자보다 크면은 켜진다 라는 거 있잖아요 켜지면은 1 안 켜지는 0 그리고 어느 때 켜지냐가 지금 얘는 0보다 클 때 켜진다 이렇게 생각하면은 이제 그러면은 그 양수인 숫자들은 다 켜진다 생각하고 음수인 숫자들은 다 안 켜진다 생각하고 딱 그거를 나누는 게 얘가 0일 때 이 표현이 0일 때 이 라인이 나오는 거겠죠 그리고 이 표현에서 우리가 바꿀 수 있는 게 어느 한수라고요 우리가 바꿀 수 있는 것은 w 밖에 없습니다 w 인해서 라인이 이렇게 가냐 이렇게 가냐 이렇게 가냐 을 우리가 결정할 수 있는 거구요 자 자 이제 저희가 아까 w, x 표현을 해서 낙하닥을 했을 때 0 왜 낙하닥으로 했는지에 대해서 여기서 그린 거 보기에 좀 편한게 얘가 이 빨간색 라인 x x는 x1과 x2를 모을 수 있는 라인들이구요 그래서 다양한 x1 x2 점을 보완할 수 있는 것들이 물론 얘가 x1이고 x2에서 이 2d 프레임에서 다 바꿀 수 있는 애들이 있지만 우리가 어떤 x1 x2를 w 곱했을 때 0으로 된 애들만 일단 이 빨간색 선으로 모은 거고 이제 낙하닥이 0이려면, 두 벡터의 낙하닥이 0이려면 그게 무슨 뜻이죠 두 벡터가 직각일 때 0이죠 그러면 x 가 0일 때 w 는 이쪽으로 가고 있구요 그러면 왜냐면은 그 우리가 정한게 x w 는 0이어야 되니까 이 라인의 w 는 딱 직각으로 나가는 애고 우리가 알아야 될 것은 다른 애들은 어떤지 현재 주어진 이 x 라인을 절실 때 예를 들어서 얘네들하고 곱하면은 낙하닥들이 이 라인하고 얘하고 곱하면은 다 양수가 되는 거고 반면에 얘네들하고 곱하면은 이 라인 다 양수가 나오죠 그래서 이제 저희가 원하는 것은 이 라인을 어떻게 구할 수 있는지 이거를 시행착오로 w 를 계속 업데이트 하는 알고리즘을 말씀드릴게요 아예 알고리즘을 그 설명드리자면 이렇게 나눠서 얘기하면 될 것 같은데 일단 처음에는 어떤 그 w 를 그냥 랜덤하게 initialize 해요 어떤 w 로 정하는 거에요 그러면은 뭐 정확한 이렇게 나눠지지는 않았지만 어떻게든 w 가 나눠지겠죠 그러면은 거기서 그 틀리게 클래시바된 친구들을 찾아서 그 친구들 중에서 가장 큰 애, 미스 클래시바된 가장 큰 애를 찾아가지고 이제 걔에 대한 것을 파스르바게 미스 클래시바된 애들은 반대로 수정을 하고 네게르바게 클래시바이네들은 또 반대로 수정해 줄 거에요.
그치 우리는 w 만 수정한다고 했죠?
그쵸?
w 만 수정했는데 틀리게 된 애에 봐서 반대로 그 선을 조금 끄떡 해주는 거에요 끄떡 해준다는게 어떻게 말씀 드릴까요?
사실 사진을 봐야지 제일 도움이 많이 되는데 그냥 우리가 제일 첫번째 랜덤하게 그 weight 를 설정했죠 그래서 이 라인이 딱 그어졌다고 해 봅시다 그럼 여기서 이제 틀리게 클래시바된 애들이 있죠?
왜냐면 우리가 정확하게 돼야지 한쪽으로는 다 같은 색깔 반대쪽으로는 다 같은 색깔인데 지금 그렇지 않잖아요 그러니까 w 를 수정해야 되겠죠 w 를 어떻게 수정하냐 예를 들어서 얘가 잘못 그 네게르바게 잘못 파스르바게가 되는데 네게르바게 클래시바이네를 써요 그러면 현재 있는 아까 w 를 w 플러스 x y 라고 했었죠 그러면은 그 현재 있던 weight 얘가 w 에서 xy가 이쪽이었는데 반대로 얘가 이 벡터를 이렇게 갖고 오는 거에요 그러면은 얘가 갖고 왔던 거를 이렇게 해서 이리로 가겠죠 그러면은 이렇게 됐던 선을 이제 이 방향으로 수정해 주는 거에요.
그럼 어떻게 되냐 그러면은 이렇게 됐던 라인이 아까 이렇게 갔던 벡터로 얘가 이렇게 좀 가겠죠 이해 되셨나요?
처음에 그냥 잡았던 weight로 라인이 되는데 얘가 잘못 클래시바이네를 했어요 그래서 얘로 인한 그 x 값을 w 에다가 수정해 주는 거에요 그러면 그 벡터를 두 개 더 했을 때 나오는 weight가 새로 이쪽 방향으로 틀고 얘는 이제 오른쪽으로 갔죠 그러니까 올타는 쪽으로 가는 거죠 아까는 이렇게 됐을 때는 틀리게 클래시바이네를 했었는데 얘가 이렇게 오면서 얘랑 얘랑 이제 구별이 되잖아요 얘는 이렇게 묶이고 근데 아직도 얘가 제대로 안 되는 게 있어요.
그래서 또 반복을 해야 되겠죠 똑같이 현재 있는 상황에서 얘가 틀렸으니까 현재 있는 벡터에서 얘를 또 갖고 오겠죠 이렇게 그러면은 마지막으로 또 한번 있었던 선이 움직이면서 이렇게 가면서 이쪽으로 되죠 그러면 이제 최종적으로 한쪽으로 붙는 팀 안 붙는 팀을 완벽히 나눌 수 있는 w 를 구할 수 있는 겁니다 그래서 처음에는 랜덤하게 w 를 설정해 가지고 막 시도를 해보는 거에요 그렇게 했는데 틀린 것들이 있네?
그럼 틀린 대로 수정을 반영을 하는 거죠 그러면은 처음에는 제일 첫번째 샘플 time 0 이었을 때는 어느 숫자였겠지?
거기에서 얘를 수정을 해줘요 뭐 꼭 1은 아니겠지만 여기서 수정된 값이 있겠죠?
그러면은 얘를 또 t일 때 이렇게 계속 갖고 와가지고 수정한 거죠 언제 끝나냐 이거를 계속 반복하는데 끝나는 거는 모든 함수가 다 완벽하게 구별이 됐을 때 perfect classification 됐고 오류가 하나도 없을 때 알고이증이 끝나는 겁니다 자 이번 예시를 요약해보자면은 우리가 w 를 배운 그 w 가 중요하다는 걸 알았죠?
예를 들어서 x input이 왔을 때 y output을 줘야 되는데 이것을 맵핑 해주는 그 우리의 mlp function이 그 w 의 함수로 주어져 있다고 했었죠?
왜냐면 mlp의 목적이 주어진 x 를 y 로 맵핑하는데 우리가 반영할 수 있는 것은 그 연결된 중요성 weight니까 근데 weight를 사람이 물론 그 숫자적으로 다 그 쉬운 모델에서는 정할 수 있지만은 좀 더 복잡한 문제들은 사람이 직접 weight를 정할 수가 없어요 그렇기 때문에 이거를 시행착오로 반복적으로 해서 조금 조금씩 수정해야지 그 최적화된 그 w 를 찾을 수 있는 거죠 그거를 반영하는 예시 결국 mlp 로도 두가지 input 그러니까 그 아까는 tfgre라는 input이 왔을 때 얘가 붙을지 안 붙을지 입학이 될지 안 될지 에 대해서 예측할 수 있는 문제를 세팅해 보고 어떻게 w 를 푸는지에 대해서 옛날 알고리즘을 한번 보게 된 겁니다 이해 되셨나요?
자 근데 이제 그 제가 옛날 알고리즘이라고 해가지고 물론 더 개선된 점도 있겠죠 근데 이제 혹시 뭐가 가장 단점?
이 방식에 대한 단점이 아닌가 짐작되시는 게 있으세요?
이거에 대한 단점 가장 큰 단점은 바로 보여드리기 전에 힌트를 드리자면 우리가 주어진 w 하고 x 했을 때 결국 얘가 얼마나 틀렸는지 아니면 얼마나 옳았는지를 판단을 해야 되잖아요 그걸 판단해서 이제 수정해야 될지 알아야 되는데 우리가 이 두가지 케이스를 구별할 수 있나요 예를 들어서 이렇게 가는 선이나 현재 빨간색 선이나 비교했을 때 뭐가 더 옳다 뭐가 더 틀리다 라고 구별할 수 있나요 없죠
왜냐면은 빨간색 선으로 나왔을 때도 다섯 개가 다 똑같이 여기는 총 12개가 다 옳게 클라스바이 했고 빨간색 선으로 했을 때도 다 12개가 다 correctly 예측된 거에요 그래서 선이 이렇게 갔을 때 얘가 이쪽으로 가야 될지 이쪽으로 가야 될지 몰라요 알 수 있는 방법은 오직 정말 실제로 크게 한계가 잘못 예측됐을 때 알 수 있는 거지 이런 조그만 차이들은 우리들이 구별할 수 없다는 거죠 그래서 이런 간단한 12가지 예시밖에 없는 문제에서는 간단하게 할 수 있지만 좀 더 큰 문제들에서는 이 조그만 차별성을 둘 수 없어서 얘가 사실 되게 큰 문제점이 됩니다 근데 그러면 이런 문제가 왜 생기냐 결국 이 문제는 우리가 얼마나 틀렸냐 얼마나 옳았냐 를 얘기할 때 결국 우리가 총 12개에서 몇 개가 맞았냐 결국 개수 세기로 하는 거기 때문에 똑같이 12개를 다 맞춰도 여기 있는 차이들을 구별할 수가 없다는 거죠 왜냐하면 이거는 되게 그 뭐라 해야 되지 컨티뉴어스 하지 않고 그냥 얘가 옳냐 안옳냐 그거를 구별하고 그거를 더하는 거기 때문에 예를 들어서 얘가 1이냐 마이너스 1이냐 그리고 얘네들을 다 합하는 거기 때문에 그거를 구별하기가 어렵다는 거죠 그래서 우리가 그 이제 prediction 할 때 더이상 이런 어느 순간까지 가다가 딱 켜지는 이런 activation 같은 걸 쓰지 말고 우리가 선호하는 것은 이제 이런 smooth한 컨티뉴어스한 것을 우리가 선호하고 이렇게 그냥 갑자기 어느 순간 가다가 0에서 1로 켜지는 이런 디스크립트한 것은 선호하지 않는다는 거죠 이런 컨티뉴어스한 게 있어야지 이제 아까 그렇게 세세한 차이점이 있어도 어느 조그만 차이가 있어도 더 좋은 방향으로 가고 있다 더 틀린 방향으로 가고 있다.
이 디스크립트 같은 경우에서는 내가 여기에 있던 여기에 있을 때 내가 일로 가던 일로 가던 똑같은 앞붓이기 때문에 어느 방향을 가도 내가 더 잘하고 있는지 더 못하고 있는지 몰라요 반대로 우리가 여기 있으면 일로 갔을 때 숫자가 변하죠 일로 가도 숫자가 변해요 그러니까 어느 방향으로 갔을 때 내가 더 오른 방향으로 가고 있는지 더 틀린 방향으로 가고 있는지를 알 수 있기 때문에 얘네가 훨씬 더 좋다는 거죠 결국 얘가 이제 그 러닝하는 커뮤니티 사람들에서 이제 결국 얘가 differential 하냐, 리분을 할 수 있는 함수들로 만들어졌냐 이제 되게 중요한 게 여기에요 이걸 왜 중요하게 얘기냐 아까 제가 말씀드렸던 조그만 방향 뭐를 조금 바꼈을 때 얘가 어떤 방향으로 가고 있는지를 리분할 수 있기 때문에 정말 중요하다는 거죠 그거를 그림으로 한번 볼게요 이제 더 이상 이렇게 디스크립트하게 하지 않고 smooth and continuous 한 activation function 중에 한 개가 이제 되게 인기 많은 이런 함수라고 불리는데요 segmented 함수라고 근데 얘는 큰 장점이 0에서 1로 끝난다는 일단 특징이 있구요 이렇게 0에서 1로 생각하면 힌트가 딱딱딱 올라와야 되는게 얘를 퍼센트 확률로 그 표현하기에 좀 생각할 수 있다는 거죠 0에서 1로 가는 거고 뭐 여기 있으면 거의 100% 맞다 여기는 거의 0% 아니다 여기는 좀 애매하다 그런 쪽으로 할 수 있게 그 완전 1, 0으로 나는 이런 예시보다도 비슷한데 대신 리분을 할 수 있고 어느 방향으로 가면 더 옳다 틀리다 알려줄 수 있는 정보이기 때문에 segmented 라고 참 좋은 activation function이죠 이거를 이제 mlp 에 적용을 하면은 어떤 장점들이 있냐 일단 수학 공식들은 제가 나중에 볼 거니 너무 걱정하지 마시고 여기 있는 것들이 결국 뭘 가리켜 주냐 예를 들어서 첫번째 한번 볼게요 이 y와 이 z의 관계를 얘기해 주는 거에요 z를 조금 변하면 y가 어떻게 변하느냐 예를 들어서 z를 좀 더 플러스로 주면 y가 어떻게 반응하고 z를 좀 더 마이너스 주면 y가 어떻게 반응을 해주냐 이렇게 알려주는 거고 반대로 뭐 반대로 z 한수와 w, w를 조금 바뀌면 z가 어떻게 바뀌냐 한수로 표현할 수 있는 거고 x가 좀 바뀌면 w가 어떻게 바뀌냐 또 다 표현할 수 있어요 이제 왜냐면 이제 다 continuous 하고 differential 하고 리분할 수 있는 한수로 표현을 하게 되니까요 그러면은 최종적으로 우리가 원할 수 있는 것은 x가 바뀌었을 때 우리가 그 y를 원하는 x input이 어떻게 됐을 때 원하는 output으로 바꿔 줄 수 있는 weight 들을 어떻게 그 상호작용 어떻게 연결되고 얘를 조금 바꾸면은 얘가 어떻게 반응해 주는가를 다 이제 표현을 할 수 있다는 거죠 예를 들어서 x input이 왔을 때 이 y output이 어떻게 자극을 주냐 를 이 커넥션들로 다 알 수 있다는
거에요 알 수 있다는 것 뿐만 아니라 이제 연결이 됐고 수학적으로도 이제 표현을 할 수 있다는 거죠 그러면은 한 input 뿐만 아니라 여러 input들을 봤을 때 각 input들이 이 output을 어떻게 영향을 준지 우리가 계속 그 리분하면서 w를 계속 최대한 최적화 할 수 있을 때까지 수정할 수 있습니다 한가지 예시를 들면은 뭐 다시 그 고양이 강아지 예시를 구결할 때 x가 뭐 귀 라고 해볼게요 그리고 x2가 뭐 코라고 하고 그러면은 x1 이 귀가 고양이에 대해서 얼만큼 그 중요성을 주는지 얘네들로 다 연결이 될 수 있다는 거고 그리고 이제 이 얘네들을 계속 업데이트 시킬 수 있는 거고 반면에 그 다른 input으로 똑같이 업데이트를 계속 해줄 수 있다는 거죠 그리고 이게 수직적으로 계속 리분하고 수정할 수 있다 그리고 에러를 구할 수 있다 그리고 그 에러로 인해서 w를 어떻게 바꿀 수 있어야 되는지 좀 더 플러스로 갈지 좀 더 네게르비로 갈지 그것도 할 수 있다 해서 이게 반복된 시행착오를 하면서 MLP를 학습시킬 수 있는 방법입니다 그리고 오늘은 binary classification 그 예시로 MLP를 한번 볼 거구요 아 우리가 좀 많은 예시를 보긴 했는데 시각화 즉 직관을 얻는게 제일 중요하니 그림들을 한번 좀 계속 보시면서 아 한번 그 아까 수식 쓴 것도 한번 직접 보시고 유튜브에서 있었던 그 유튜브 채널도 꼭 한번 같이 보셔서 직관을 키우는 데 직관을 키우는 것을 정말 추천드립니다 그러면 오늘 예시는 여기까지 하고 수고 많으셨습니다 다음번에는 MLP 말고 다른 단점들에 대해서도 설명드리겠습니다 자 그러면 이제 수식을 해보겠습니다 지난번에 저희가 커버했던 것이 이제 perceptron 알고리즘이라고 그 분류하는 문제였었죠 분류라는게 이제 알고리즘을 얘기하기 전에 먼저 문제를 다시 찍고 넘어가 볼게요 우리가 자기가 원하는 것은 classification 문제였었죠 classification 이라는게 주어진 데이터가 왔을 때 우리가 얘를 y로 output 할 수 있느냐
그리고 예를 들어서 x는 그 input dimension이 좀 크다고 해봐요 뭐 d dimension이라고 할 수 있고 예를 들어서 뭐 d by d 이미지라고 생각하면 이미지에도 이렇게 각각 틀어들게 있을 수가 있잖아요 그래서 이런 input x가 왔을 때 output y에 나오는게 minus 1이냐 1, 얘가 cat이냐 dog이냐 이렇게 해가지고 뭔가 input이 왔을 때 2개 중에 1개를 고르는 뭐 꼭 2개는 아니죠 여러 개 중에 1개를 고르는게 classification인데 이제 저희가 쉽게 보는 문제는 이제 딱 2개 앞으로만 볼 거니까 이제 얘를 binary classification 2개를 분류할 수 있는 문제를 저희가 지금 관심이 있어 보이죠 그리고 이제 더 문제를 쉽게 하려고 하면은 저희가 y를 이제 딱 2개로 이 output dimension으로 y는 결국 그 알에서 2 dimension 딱 2개만 고를 수 있을 거니까 풀어버릴 수도 없죠 그냥 r is a weight.
왜냐하면 minus 1이냐 1이냐 딱 그 한 개만 고른거니 그리고 x도 아예 그 dimension을 좀 더 쉽게 만들어 볼게요 얘는 너무 크니까 이미지라는 걸 하지 말고 얘는 아예 r2 그냥 x1 x2 있어가지고 그냥 이 2d 평량에 어떤 값이 나올 때 이런 input들이 있다고 해봅시다 그냥 이런 input들이 들어올 수 있는 거예요 이 x1과 x2 이 2d 좌표에서 예를 들어서 이 점은 x1 x2라는 값이 있을 수 있고, 예를 들어서 이 x자는 x1, x2, x2, x3 이렇게 될 수 있는 거죠 결국 그래서 얘기하고 싶은 것은 이 input x라는 input은 결국 이거 한개, 이거 두개, 이거 한개, 이거 두개 라는 이 dimension 이라는 걸 이렇게 만드는 거죠.
두가지로 표현할 수 있다는 것이 이 예시가 조금 더 쉬운 거죠 그래서 제가 지금 보고 있는 문제는 binary classification을 여태까지 계속 보고 있었어요 그래서 이 문제를 지금 저희가 이런 데이터가 왔을 때 저희가 하고 싶은 것은 색깔을 바꿔서 여기 x를 점들하고 나눌 수 있는 이 라인을 어떻게 구할 수 있느냐 아니면 얘가 dimension이 조금 더 높아지면 이 라인이 아니라 이제 평면이 될 수가 있겠죠.
3차원 있을 때 이 데이터들을 3차원 공간을 나눌 수 있는 2d 평면이 될 수도 있고 dimension이 3차원을 지나서 4차원, 5차원, 6차원, 7차원까지 간다고 하면 비슷한게 그냥 이제 그거를 나눌 수 있는 평면을 찾는거죠 납작한 평면이 아니지만 그것보다 조금 더 낮은 dimension에 나눌 수 있는 공간을 찾는 거죠.
결국 얘가 어떻게 될 거냐 그래서 왜냐하면 이 라인을 구할 수 있으면은 이제 저희가 뭘 할 수 있겠어요 예를 들어서 다음에 무슨 새로운 점이 들어와요 예를 들어서 얘는 x인지 o인지 몰라요.
그냥 새로운 x가 들어왔다고 해봐요.
여기에 이제 뭐 x1인데?
있는게
있고 x2인데?
있는게
있어요.
얘가 점일거냐 x일거냐는 걸 몰라요.
근데 우리가 이전 데이터로 이렇게 라인을 구할 수 있는 공식이 이전 데이터로 벌써 그어져 있으면은 얘가 여기에 새로운 점이 들어왔을 때 이 새로운 점은 내가 여태까지 주어진 데이터로 그은 선보다 밑에 있으니 내가 예측하기로는 얘는 x일거다 라는 이제 자신감이 있는 거죠.
왜냐하면 이전 데이터로 이렇게 나눠 놨으니까 그래서 데이터들이 있었을 때 어떻게 나눌 수 있으나 어떻게 데이터들을 분류시킬 수 있는 이 라인을 어떻게 구하고 이 라인이 있으면은 새로운 것이 왔을 때 이게 지금 저희에게 주어진 문제에요.
그래서 이 문제를 하기 위해서 저희가 지난번에 커버했던 알고리즘 한게 있었죠 역시 learning을 쓰는 거니까 perceptron 알고리즘을 썼죠 자 perceptron 알고리즘을 아까 설명했었는데 여기서 다시 복습하기 전에 한번 여기서 비디오를 pause 해보시고 이 perceptron이 어떻게 되는지 한번 생각해 보세요 네 그래서 저번에 했던 것을 다시 한번 복습하자면은 지금도 binary classification이죠.
왜 binary냐?
왜냐하면은 지금 output에 있는 y의 값이 나올 수 있는게 1이냐,-1이냐 딱 두가지 밖에 없어요.
1은 여기서 red, 빨간색이고 1은 blue.
그래서 아까 다른 예시를 들으셨는데 1은 강아지로 표현할 수 있고,-1은 고양이로 표현할 수 있고 이렇게 두개 나눌 수 있는 것에서 우리는 선을 찾아야 되는거죠.
근데 이제 여기서 perceptron 알고리즘을 이제 이거는 단복적으로 iteratively 계속 돌아가는 방식이었죠 그래서 이 알고리즘은 제일 먼저 간단하게 시작하는게 이 라인을 찾아야 되는데 이 라인은 일단 w와 b, weight vector와 bias vector로 구현이 정의가 된 플레임이구요.
이 w를 이제 저희가 계속 정화시키면서 수정하면서 이 w를 계속 쭉쭉쭉쭉쭉 제일 처음에 했을 때는 w0과 b0이 있겠는데 얘를 이제 처음에 어떤 그냥 랜덤한 숫자로 그냥 해서 찍은거에요.
우린 이걸 먼저 시작을 하겠다.
근데 그 처음에 어떤 숫자로 골라서 시작했을 때 에러가 있겠죠.
거기서 이제 수정을 하고 수정한 각으로 이제 다음 w1, b1 각이 나와요.
그거에 대해서 이제 새로운 선이 나올거고 새로운 선에서 또 이제 체결을 해보고 거기서 에러가 나온 걸로 또 새로 반영을 하고 그렇게 하다가 쭉쭉쭉쭉쭉 가다가 이제 어느 순간 이게 딱 두개를 다 완벽하게 나오는 알고리즘이 되는 거죠 근데 그게 이 알고리즘이 그 어느 순간 여기서 이제 딱 끝날 거다 라는 큰 과정이 있어요.
그 과정이 무엇일까요 그 과정은 바로 지금 저희한테 주어진 데이터가 Linearly 하게 나눠질 수 있다.
결국 선형으로 이거를 어떻게든 자르던 나눌 수 있다는 문제죠 근데 많은 문제들이 그렇지가 않을 수 있어요.
예를 들어서 이 현재 주어진 이 그림에서 점 한개를 추가해가지고 Linearly 나눌 수 없는 예시를 한번 해볼 수 있으세요?
예시를 한번 드려볼게요.
예를 들어서 지금 이렇게 완벽한 데이터가 들어왔는데 뭐 세상에 있는 데이터가 다 완벽하지가 않죠 노이즈가 있을 수도 있고 뭐 잘못 로빙된 것도 있을 수 있으니까 예를 들어서 갑자기 파란색 점이 1개 추가된 데이터가 들어왔다고 해봐요 그럼 얘를 선으로 직전선으로 2D 평면에서 나눌 수가 있나요 한번 그어볼까.
직진을 하는 거니까 뭐 이렇게 나온다 해도 밑에 있는 얘네들을 놓치는 거고 뭐 이렇게 하려고 해도 지금 얘를 놓치죠 그래서 이 파란색 선이 있을 때 완벽하게 나누려면 이렇게 나눠야 되겠죠 근데 더 이상 얘는 Linear하지가 않죠 얘는 조금 더 어려운 문제가 있는데 그건 나중에 볼 거구요 이것은 저희한테 주어진 문제.
지금 이 Perceptron 알고리즘이 몇 번 반복되면서 돌아가는 건데 그에서 가장 큰 assumption 저희가 만드는 조항이라고 해야하나요 그것은 결국 저희한테 주어진 데이터는 Linear하게 나눠질 수 있는 데이터를 받았다 선정하고 이제 이걸 돌리는 거에요 만약에 그렇지 않은 데이터를 썼다 다시 아까 이런 나눠지지 않는 데이터를 갖고 있었다 하면은 이 Perceptron 알고리즘은 무한 반복에 돌아가고 빠져나오지 못할 거에요 ok 그래서 첫번째 알고리즘의 시작점은 일단 어떤 w하고 wb, weight하고 어떤 bias를 그냥 랜덤하게 골라요.
어디든 선을 빗다 라고 생각하는 거죠 일단 어떻게든 시작해야 되니까 그래서 이 빨간색 선이 나온거에요 지금 여기서 이제 수식을 다시 살리자면 여기서 이제 b를 그냥 w 같이 합쳐서 이 라인을 w로 다 표현할 수 있다고 할 거구요 그 다음 이제 여기 있는 점들 파란색이던 빨간색이던 얘네들을 다 x,y 라고 표현할 수 있습니다 예를 들어서 x,y 라고 하는 것은 데이터들 만약에 x 라는 벡터가 이렇게 들어갔어요 그리고 첫번째 두번째 세번째 쭉쭉쭉쭉 해서 얘가 n 까지 간다고 해보죠 그리고 여기에는 y 가 있어요 똑같이 y에도 그 이게 똑같은 n 갯수 있겠죠 다만 y 는 얘가 파란색이냐 빨간색이냐 파란색이냐 있고 x 에서는 뭐 이 두가지 좌표가 있겠죠 이렇게 이렇게 해서 나오는 거고 결국 x,y 는 이 순서대로 그 포함되는 데이터들이에요 그래서 여기서 그림에서 봐야 될 것은 w와 이제 x의 상관계죠 그래서 이런 경우를 라인 그렸을 때 일단 첫번째 할 것은 뭐가 틀렸는지를 보는 거에요 근데 뭐가 틀렸는지 중에서 그냥 한개를 골라요 한개를 골랐으면 얘가 선정된 거죠 그러면은 지금 얘가 x,y 라고 해봤을 때 여기서 얘가 그냥 처음에 굴렸던 데 얘가 misclassified 했다고 해보죠 그러면은 이 x,y 에 대한 이 벡터를 구할 수 있어요 그러면은 이 벡터가 w와 x,y 에 이제 이걸 dot product 라고 하는데 벡터들과의 왜냐하면 w 도 벡터고 지금 x,y 도 벡터죠 dot product 를 하면은 사실 거리를 구해주는 거에요 그러니까 예를 들어서 완벽하게 그 표현을 플립하게 됐다고 해야하나?
잠시만요 dot product 먼저 얘기하지 말고 일단 알고리즘을 쭉쭉 나가볼게요 그래서 다시 이 라인을 먼저 구었고 w,o 를 랜덤으로 골라서 misclassified 를 먼저 찾아요 misclassified 에 대해서 이제 그 w 를 업데이트하고 얘는 이쪽 방향으로 가는거니 얘를 이쪽으로 추가하고 w를 예를 들어서 첫번째 w,o 이 이었으니 w,e 를 업데이트 할 때는 w,o 더하기 이제 x,y 을 하는 거죠 그러면은 얘가 그쪽 방향으로 수정되고 여기서 알고리즘을 또 반복해요 여기서 틀린 애가 또 나오겠죠 여기서 그래서 x 를 또 구하고 그 값을 w 에다가 또 수정하고 하다보면은 어느 순간 그 이상 misclassified 틀리게 분류한 애가 없을 거다 라고 나올 거에요 그 저번 비디오 만들었을 때 그 perceptron 알고리즘 슬라이드가 있었던 것 같아요 그 슬라이드를 한번 다시 직접 구현을 해보고 싶다 하시면 그 슬라이드를 보고 python 코드로도 직접 써볼 수 있을 거에요 근데 이제 그 저희가 perceptron을 잠깐 복습하고 싶었던 이유가 단점이 엄청난 단점이 있어요 이 문제에서 일단 첫번째는 저희가 아까 그 데이터가 주어진게 linearly separable한 애들한테만 적용할 수 있다고 했었죠 근데 저희가 이제 이 라인을 구한 이유가 뭐에요 wn을 구했을 때 이제 현재 주어진 x1에서 xn까지 받았을 때 이 wn 으로 완벽하게 나눌 수 있었다 했는데 저희가 원하는게 뭐죠 이제 xn 플러스 1 새로운 데이터가 왔을 때 얘는 old 데이터로 이 wn을 만든거고 얘로 train 했던게 wn 으로 이 라인이 나온거고 이제 xn 플러스 1이라고 새로운 new 데이터가 들어갔을 때 우리가 이제 yn 플러스 1을 정확하게 1인지 마이너스 1인지 구별할 수 있을까?를 하기 위해서 했던 거잖아요 그쵸?
근데 이제 여기서 어떤 단점이 있을까요 잠깐 한번 생각해 보세요 저번에도 언급했던 것 같은데 혹시 그걸 기억하시는지 몰라서 다시 말씀드리자면 지금 라인을 두개 그릴건데 그 두개가 이 Perceptron 알고리즘을 구별할 수 있는지 한번 생각해 보세요 지금 현재 주어진 이 빨간색 선과
이렇게 그어진 선과 알고리즘이 차별이 되나요?
현재 주어진 데이터로만 봤을 때?
안되죠.
왜냐하면 이 알고리즘은 틀리게 그 분리된 게 있을 때까지만 돌아가라고 했으니 내가 라인을 이렇게 딱 중앙에 그렸던 아니면 삐딱하게 이렇게 딱 그렸던 아니면 또 이렇게 그렸던 사실 차이가 없죠 그러면은 예를 들어서 아주 좀 예시를 한번 들어볼게요 운이 나빠서 이 라인을 이렇게 그렸다고 해봐요 진짜 아주 타이트하게 그렸어요 직선이 해야 되는데 제가 직선을 좀 잘못 그렸네요 아 아주 타이트하게 이렇게 그렸어요 근데 빨간색 점이 새로 이렇게 새로운 점이 이렇게 들어온거에요 그러면은 우리 알고리즘은 지금 얘를 wm 여기까지 트레이닝 했으니까 어 이 빨간색 점이 그러니까 이 새로운 점이 들어왔죠?
그리고 얘는 몰라요 왜냐하면 우리가 이제 트책을 해야 되니까 근데 얘는 다른 애들과 비슷하게 다 이쪽에 있으니 얘는 파란색이어야 되겠다 라고 트책을 하겠죠 그러면 틀린거잖아요 저희가 무슨 얘기를 하는지 지금 아시나요?
저희가 원하는 것은 정말 딱 이 사이 이 점들 사이 이거 이거 이거 이거에 정말 딱 이렇게 점 중앙에 이렇게 예쁘게 가야지 이게 지금 주어진 데이터에 최적화되는 분류 라인이라고 할 수 있죠 이 빨간색 선이 이 파란색보다 더 짧은 거고 얘보다도 잘 남은 거고 라고 할 수 있겠죠 근데 이 perception 알고리즘을 그걸 분류를 못해요 그래서 그 모션 러닝을 하면은 약간 딥러닝 배우기 전에 약간 더 딥러닝은 최근 그런 문제들이었잖아요 딥러닝 전에도 이런 문제를 풀 수가 있었죠 그래서 어떤 방식으로 이런 걸 풀었냐 하면 항상 꼭 한 번씩은 들어볼 일이니까 한번 크게 쓸게요 흠 이래서 최종적으로 우리 이런 라인을 원하는데 예를 들어서 이런 라인도 싫고 이런 라인도 싫고 우리는 이런 라인을 원한다 그거를 어떻게 구별할 수 있냐 그거를 구별할 수 있는 알고리즘이 perception보다 좀 더 정확하다고 할 수 있지만 좀 더 다른 방법이 필요인데 Soft Vector Machine 이렇게 약자를 해서 SVM.
SVM이라고 되게 많이 사람들이 많이 알고 있습니다 지금 모션 러닝이 이렇게 핫해도 간단한 문제가 있잖아요 그러면 굳이 딥러닝 안쓰고도 SVM으로 많은 문제를 풀 수가 있어요
데이터가 이제 러닝을 Linearly Classify 해야 되고 아 꼭 그렇지도 않구나 Linearly Classify 할 필요도 없어요 그냥 좀 더 간단한 dimension과 그리고 데이터가 그렇게 많지 않다 하면은 SVM으로 충분히 풀 수 있는 문제들이 많이 이거는 정말 대표적으로 많이 나오는 문제인데 이거를 왜냐하면 이걸 들어갈 때 약간 공식으로 들어가 볼 생각이거든요 이거를 하기 전에 하기 전에 약간 SVM은 진짜 1990년?
그때가 뭐 개발됐고 그때부터 사람들이 쓰기 시작했던거에요 딥러닝은 뭐 한 2010년?
2015년?
이때 막 되게 많이 나오게 됐잖아요 그래서 이때도 상당히 많은 문제를 해결할 수 있고 꼭 Linearly 아까처럼 Perception은 Linearly Separable 데이터가 선을 그어가지고 이렇게 나눠줄 수 있는 애들만 풀 수 있었지만 SVM은 그렇지도 않아요 얘네는 좀 더 복잡한 그러니까 Linearly 하지 않는 애들도 Non-Linear 하는 애들도 풀 수 있죠 그래서 되게 파워풀한 데이터에요 근데 이제 이 Linear하고 Non-Linearly Separable 데이터를 좀 더 생각해 보기 위해서 얘가 왜 그렇게 우아한 건지 잠깐 팟 퀴즈?
약간 머리 한번 다른 머리를 돌린다는 생각을 했을 때 저희한테 점이 두개 주어졌어요 점1개하고 점X.
얘를 선으로 나눌 수 있나요?
물론 나눌 수 있죠 그리고 그러니까 얘는 아직 똑같이 그 binary classification 한다는 생각을 하시는 거에요 binary classification 그리고 점이 이제 3개 있어요 점이 3개 있을 때 모든 데이터가 다 Linearly Separable 할까요?
어떻게든 나왔을 때 이렇게 나눌 수 있고 얘가 이렇게 되는 순간 안될 수 있죠
그리고 또 다른 방면에 Linearly 안되는 경우가 이렇게 됐을 때도 이제 Linearly Separable를 더이상 못하지 않다 2d 평면에서만 해도 그 데이터가 어떻게 드러나는 데 따라서 그 Linearly Separate 하지 못하는 경우들이 이제 실제는 진짜 많아요 이런 이제 뭐 연습 문제들이나 그런 거에서는 이제 저희가 다 Linearly 하게 문제가 주어지니까 할 수 있지만 실제에서는 그렇지 않기 때문에 그럴 땐 방법이 후처리를 하던지 데이터를 최대한 Linear로 만들기 위해서 나쁜 데이터들을 다 제거하고 그러는지 아니면 이제 우리는 Linear로 하지 않을 거다 Non-linear 할 수 있는 알고리즘을 해야되겠다 해가지고 지금은 저희가 얘를 나눌 수 없는 이유가 그 선형으로만 해야 되기 때문에 못 나누는 거지만은 이제 그 Non-linear 한 애들을 이렇게 나눌 수 있게 되는 순간 뭐 여기 있는 애들은 여기 있는 애들은 뭐 마이너스 3가 이 바깥에 있는 애들은 이제 플러스 1이다 이렇게 나눌 수 있기 위해서 얘도 똑같이 그렇게 했죠?
얘네들은 이제 Non-linear 할 수 있는 애고 svm이 그렇게 할 수 있어요 그래서 svm이 꼭 머신러닝을 다 푸는게 아니다 라는 거를 한번 말씀드리고 싶었어요 이전에도 좀 복잡한 문제들도 머신러닝 하나도 안 쓰고 그냥 옵티미세이션 수학적으로 접근해서 풀 수 있는 문제들이 있었다는 걸 말씀드리고 싶은 거죠 신기하지 않아요?
자 그러면은 svm에서는 제가 간단하게만 비슷하게 공식만 적고 나중에 비디오를 좀 더 찾아보는 것을 추천드릴게요 근데 이전에 썼던 노테이션들을 다 가져와서 svm을 했을 때 얘는 이제 옵티미세이션 문제라고 많이 푸는데 옵티미세이션 문제는 주로 항상 두 개가 있어요 첫번째는 Objective 우리가 무엇을 풀고 싶나 그리고 두번째는 이제 Constraint 얘를 풀 때 무엇을 지켜야 되는가 그래서 이제 svm에서는 자기가 푸는 문제를 w, x, b 간단하게 해서 b를 그냥 없앤다고 할게요 아까 얘기했던게 perception에서도 x 들이 있을 때 weight를 곱해서 써면서 output이 나온다고 했었죠?
그러면은 x, w가 있고 이제 여기서 bias term을 들어갈 수 있는데 bias term을 w랑 합쳐 가지고 그냥 생략하는 경우도 많아요 그래서 우리는 지금 노테이션을 쉽게 하기 위해서 뺀다고 할게요 그러면은 w, x w, x 가 무슨 의미가 있는지 한번 생각해보세요 w, x 가 input이 주어졌을 때 output을 mapping 하는 거죠 예측, prediction 하는 그냥 function이라고 생각하시면 됩니다 그리고 그리고 얘를 우리가 하고 싶어 원하고자 하는 것은 이렇게 적을 수 있는 거구요 이게 무슨 뜻이냐?
그림이랑 같이 보면 좋을건데 x, w, x 했을 때 얘와 자 한개씩 보시다 얘가 아까 이쪽이 예측이라고 했었죠 얘가 input이 주었을 때 뭔가 예측해 줄 수 있는 function이고 그 예측된 것에서 minimum을 보라고 하니 이는 결국 아 여기서 이상한게 있구나 아까 말씀드리고 싶었던 게 w와 x, i의 dot product where 얘하고 얘가 둘다 vector 있을 때 vector의 dot product dot product는 즉 vector 두 개의 거리를 알려주는 애거든요 그렇다면은 지금 w라는게 뭐였죠?
w가 제가 지금 드러내는 이 plane이죠 선이던 plane이던 w인데 w와 x의 dot product의 결국 거리라는 것은 이 거리에요 그러면은 이 w에서 모든 데이터 x, i에 이 거리라는 vector가 있겠죠 dot product를 다 구할 수 있죠 근데 이 dot product 중에서 minimum을 보는 거에요 제일 조그만한 즉 그게 무슨 말이겠어요?
minimum을 본다는게 제일 가까운의 한 명을 본다는 거죠 계속 그러면은 여기까지 이해되셨나요?
얘가 예측한 애 그리고 dot product 하는 거니까 거리를 보는 거죠 거리라는게 이 지금 주어진 w의 hyperplane과 그 dot 한 개 그 거리를 모든 애들이 다 거리는 있지만은 제가 관심 있는 애는 지금 가장 짧은 거리를 관심을 갖고 있어요 왜냐?
왜냐 가장 짧은 애 이 작은 거리 선하고 얘겠죠 얘를 최대한 마지막 텀이 뭐에요?
x-마이 사고 싶다 즉 x-마이 산다는게 이 거리를 최대한 가장 가까운 애랑 멀리 있으면 좋겠다 멀리 있으면 좋겠다 그게 어떤 효과를 갖고 있을까요?
예를 들어서 얘가 너무 가깝게는 얘 있는 선하고 반면에 얘 있는 선하고 1번 2번 어느게 더 좋죠?
저희가 원하는 것은 2번이 더 좋은 거죠 왜냐면은 얘는 사실 너무 가깝잖아요 1번 선은 너무 가까워요 예를 들어 가지고 새로운 점이 왔는데 운이 나쁘면은 진짜 뭐 여기 있는 애가 올 수 있잖아요 너무 이상하지 않으면 되죠?
왜냐면 현재 이전에 있던 데이터하고도 바로 가깝게 했으니까 충분히 고개 나올 수 있는데 우리는 너무 타이트하게 어 얘 마지막이지 얘보다 더 이쪽에 있는 애들은 무조건 다 파란색이야 하고 너무 당황하게 나눠버리면은 새로 들어온 친구가 어 야 나도 너랑 같이 껴야지 너무 짧게 너무 당황하게 나눠버린거 아니야?
이제 그 퍼포먼스가 낮아질 수가 있는 거죠 그래서 우리는 가장 원하는 것은 이 거리가 가장 가까운 애하고 최대한 멀리 있는게 안정감이죠 버퍼를 중요하게 생각해요 그래서 이제 뭐 한국말은 버퍼지만은 이 거리를 technically는 공식적으로는 margin이라고 합니다.
주로 이제 margin이라는게 error나 그런걸 많이 하는데 어느 정도 버퍼 아니면 어느 정도의 margin이 있어야지 그 아까처럼 1번 같은 선 이런 애보다는 2번 선이 훨씬 선호된다 하기 때문에 1번 하지 말고 이 선, 이 거리, 이 margin을 최대한 maximize 해서 2번처럼 되라가 이 공식이구요 그 다음에 이제 constraint가 뭐겠어요 선을 그냥 아무데나 그어도 돼요?
선을 뭐 이렇게 선을 어떻게 구해야 될지, 그니까 아무 리스크, 아무…
아무 라고 해야 되나?
이상하네?
그 이 objective을 고를 때 그 constraint, constraint라는게 우리가 지켜야 할 것, 규칙이라는게 있는데 그 규칙은 뭘까요?
그 규칙은 자, 이건데 이게 무슨 말일까요?
아 일단 간단하게 아까처럼 b를 없애고 그냥 w가 같이 포함됐다고 생각해봅시다 좀 더 쉬워지겠죠 자 아까 얘가 무슨 턴이라고 했었죠?
예측하는 턴이라고 했었죠?
예측하는 턴이라고 했을 때 뭐 y hat 아니면 y 뭐 예측이라고 해볼게요 이 notation을 그리고 우리는 y를 아까 뭐 안에 속할 수 있다고 했었죠?
얘가 r이기 때문에 얘가 뽑아낼 수 있는 숫자는 1이나-1이죠.
ok 그리고 그러면 우리가 예측한 값, 얘도 1이나-1에서 사이 나오는 거고 실제 값은 어떻겠어요?
얘도 당연히 1이나-1에서 나올 수 있는 거죠 무슨 말인지 알겠죠?
예, 실제 y 값하고 우리가 예측한 y 값을 두 개를 곱해요.
곱한 애가 0보다 커야 된다.
어떤 의미를 갖고 있을까요?
어떤 의미를 갖고 있냐는 올바르게 예측을 해야 된다 라는 constraint, 그런 규칙이 정해지게 되는 거예요.
예를 들어서 우리 예측한 애가 1이라고 해봐요.
근데 정확하게 1로 예측했어요.
아, 그러니까 반대로 말했구나.
실제 값이 1인데 우리가 예측한 애가 1이에요.
그러면 1 곱하기 1은 0보다 크죠.
반면에 실제 값이 1인데 우리가 반대로 마이너스 1을 예측했어요.
그럼 이 두 개를 곱하면 얘가 마이너스 1이 되니까 얘가 더 이상 0보다 크지가 않죠.
그래서 얘는 규칙을 어긴다는 거예요.
반면에 똑같이 실제 값이 마이너스 1인데 마이너스 1이면 얘를 두 개를 곱하니까 1, 0보다 크고 우리가 틀리게 예측하면 마이너스 1이라는데 1로 예측하면 얘가 마이너스 3가 되는 거죠.
그래서 다시 이 SQM의 공식을 봤을 때 예측한 애, 그리고 가장 가까운 거리를 갖고 있는 애, 그리고 이 w의 선과 가장 가까운 거리를 최대한 멀리 시켜라.
멀리 시키되 우리가 이 문제를 풀 때 지켜야 할 것은 예측이 다 맞아야 된다.
아까 perceptron 하고 좀 비슷하죠?
perceptron 하고 비슷한데 이제 왜냐면 optimization을 푼다는 것도 얘도 결국 이제 iterative이 반복적으로 풀리게 되는 거고 다만 이제 한가지 추가된 애가 사실 얘긴 하죠.
왜냐면 우리는 더 멀리 주어진 애를 딱 정황에 갈리는 애, 그 애를 선호하게 되면 추가 텀이 생겼으니까 얘가 이제 아까 perceptron은 그 아무렇게나 나눌 수 있었잖아요?
맞기만 하면 됐었는데 예를 들어서 이렇게 나눠서서 그랬고 이렇게도 나눠서서 그랬고 그건 알고리즘이 구별을 못했었잖아요?
근데 이 SQM은 이제 이렇게 된 애를 선호하게 되는 거죠.
신기하죠?
그러면 여기서 지금 또 한가지 얘기를 해볼게요 이런 문제를 풀 때, SQM도 크게 두 가지 종류를 나눠줬어요 지금 우리가 약간 푼 문제는 hard SQM이라고 많이 불릴 수 있는데 hard SQM이라는 것은 약간 눈치 빠르신 분들은 벌써 약간 이거에 대해서 아실 수 있었을 것 같은데 아까도 제가 얘기했던 게 실제 데이터 같은 거 보면 되게 더럽게 들어오잖아요?
더럽게 들어온다는 게 깔끔하게 잘 나눠지지 않을 때가 많아요 그래서 진짜 많은 경우 모든 것을 100% 이 constraint를 이 규칙을 모든 것을 다 완벽하게 예측해야지만 된다 사실 이걸 지키기가 어려워요.
이 SQM 지금 우리가 한 문제는 hard SQM이라고 이 hard가 약간 어렵다가 아니라 약간 딱딱하다 딱딱하다는 느낌이고요.
왜냐하면 아무것도 틀리면 안 된다.
우리 예측이 다 맞아야 된다.
그런 딱딱한 조건이 있기 때문에 얘를 hard SQM이라고 많이 얘기하고요.
그런데 실제 데이터에서는 이렇게 딱딱한 조건을 갖고 왔을 때 아무것도 못 맞출 수 있잖아요 데이터가 완벽하게 나눠져 있을까?
안 나눠질 때가 많다.
그래서 이 딱딱한 조건을 좀 더 루스하게 풀자.
좀 더 부드러워야 된다 그래서 soft SQM이라고 실제 더 많이 사용하면 더 유용하다고 생각하는데 SQM은 비슷해요.
그런데 한가지 펌이 추가 들어가는 게 있어요 그게 어떨 것인지 한번 생각해 보세요 여기가 hard 문제였을 때는 아무것도 틀리면 안 된다고 했었죠.
그런데 반면에 soft SQM에 들어갔을 때는 조금 틀려도 돼.
그런데 너무 많이 틀리면 안되잖아요.
그래서 그 구별을 어떻게 할까요?
그 구별할 수 있는 데이터가 만약에 뭔가 메일고이 있어야 되겠죠.
그래서 틀려도 돼.
대만 너무 많이 틀리지 마 라는 그 추가 조항이 있습니다.
그래서 soft SQM은 이런 식으로 표현할 수 있어요 아까처럼 우리가 풀고자 하는 그 Object이고 Constraint 우리가 지켜야 할 규칙 그래서 일단 규칙부터 얘기를 해볼까요?
규칙에서는 아까 똑같죠?
얘가 우리의 예측 그리고 얘가 실제 값 아까처럼 똑같이 예측이 1과-1, 1과-1을 곱할 수 있어요 그런데 얘가 아까는 그 0보다 무조건 곱할 수 있었죠.
예를 들어서 무조건 맞아야 된다 하지만 지금은 무조건 당할 필요는 없어.
이 Psi라는 함수를 이제 포함할 거에요 이 Psi라는 함수가 이제 어느 정도 틀려도 된다 라고
해가지고 얘는 이제 예를 들어서 Psi가 3이라고 할까요?
이건 우리가 정하는 거에요.
아니면 뭐 2라고 하면은 1-2 해가지고 얘는 어느 순간 마이너스도 되겠다는 거죠 조금 틀려도 돼 다 맞을 필요 없어 해가지고 이거는 이제 우리가 정해요.
얼마큼 정도 틀려도 되는지 해서 옵티메이징을 풀 때 이제 얘가 그 맞춰 돌아가는 거죠 그리고 그 한가지 더 추가된게 이 c죠.
이 c값도 이제 그 Psi가 어느 정도의 에러를 포함해도 됐냐는 이제 그거에 대해서 그 확률이라고 해야 될까요?
그 정도의 강조라고 해야 될까요?
예를 들어서 그 얘는 얼만큼 틀려도 되라는 범위를 허용해 주는 거고 이 범위를 이제 어느 정도 강조를 줄지 예를 들어서 이 정도 범위가 있는데 딱 한번만 틀려 그 다른건 다 틀리지마 라고 하는 강조라고 하던지 아니면은 이 정도 범위를 여러번 틀려도 돼 하면은 이 값으로 약간 스케일링 할 수 있는 거리입니다 sqm 이 라이브러리들 되게 많이 있거든요 예를 들어서 뭐 그 Python 쓰시는 것을 되게 많이 쓰셔도 되는데 Python에서 이제 scipy 라고 scientific python 그래가지고 여기서 이제 learn scipy 머신러닝을 하기 위한 이제 scipy 가 있어요 여기에서 이 라이브러리를 갖고 와 가지고 이제 그 sqm 라이브러리들을 갖고 올 수 있거든요 sqm 에서 이제 뭐 리니어하게 남을 거냐 동그랗게 남을 거냐는 다양한 진짜 파라미터들이 많은데 이제 그 이런 인풋들을 한번 보여 드릴게요 자 그 scipy 에서 svm 이 되게 많이 사용 되니까 아주 편안하게 사용 할 수 있게 python api가 이렇게 되있어요 얼마나 좋아요 예를 들어서 data x y 를 만들어요 우리가 x y 를 만들고 svm 이라는 클래스를 만들어요 이 한줄로 svm 이라는 클래스를 만들고 svm 클래스를 만들었으면 fitting을 해보자 예를 들어서 optimization을 풀어보자 두줄만에 svm 클래스를 만들고 optimization을 풀어요 두줄만에 fit해요 그러면은 fit 됐으니까 새로운 값을 예측해 보자 미쳤죠 지금까지 저희가 한 30분 동안 얘기했던 그거를 세줄만에 library를 갖고 와가지고 svm 클래스를 만들고 svm 클래스를 만들어서 weight를 정해야 되고
그쵸 여기서 이제 weight를 정한거죠 weight를 정했고 정했으니 이제 새로운 값이 들어왔을 때 예측도 해봐라 예측하니까 output이 나와요 미쳤죠 그래가지고 여기서 한번 tutorial 같은 것들을 찾아보시고 여기서 이제 python 쓰면 plotting 하는 것도 다 비주얼하게 되게 예쁘게 나오니까 정말 파워풀한 툴이에요 이거를 다른 유튜브나 아니면 다른 블로그 같은 거 찾아보셔가지고 여기 또 금방 나왔죠 데이터 캠프 블로그 읽기 이런거 하면서 코드도 같이 보여줄 수 있을 테니 svm with python examples 이런 사람들이 얼마나 많아요 그림도 다 보여주고 python 코드도 바로 여기있네요 그래서 저희는 그 svm을 알려드리는 이유가 그 저희는 딥러닝 쪽으로 지금 하고 있지만 딥러닝이 나타나기 전에도 30년 전 거의 1990년이고 이런 문제를 잘 풀고 있었다 엄청난 강한 이 svm 알고리즘을 할 수 있었고 너무 인기가 많으니까 python으로 지금 몇 줄로 한 2,3줄로만 해도 벌써 데이터를 옵티마이 시키고 예측할 수 있어요 그거를 꼭 한번 보시는 것을 추천드립니다 지금 저희가 총 강의 3시간 정도 한 것 같은데 지금이 약간 어떤 문제를 풀려고 하는지 그쪽에서 좀 많이 말씀을 드린 것 같고 이제 앞으로 다음 강의 세션들을 생각해 보고 있는데 그거는 이제 좀 더 이미지 갖고 딥러닝을 어떻게 하는지 이미지에서 조금 더 자세히 얘기해 보고 이제 이미지 쪽 하면서 데이터도 같이 데이터라는게 아니고 코딩도 같이 해 보면서 직접 보는게 도움이 되지 않을까 해서 다음 세션들 몇 강은 이미지와 딥러닝 그리고 코딩까지 다 해보는 걸로 해보겠습니다 수고하셨습니다