본문 바로가기
정보공유

[정보] 백날 자습해도 이해 안 가던 딥러닝, 머리속에 인스톨 시켜드립니다.

by 날고싶은커피향 2018. 3. 3.

백날 자습해도 이해 안 가던 딥러닝, 머리속에 인스톨 시켜드립니다. 라는 제목의 자료입니다.

아주 잘 정리된 자료입니다. 내용 참고 하시기 바랍니다.

자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다. from Yongho Ha

 

 1. 하용호 @kakao
 2.  하용호 용 호 오랜만이죠? 이 짤?
3.  딥러닝이뜨긴떴습니다.
4.  딥러닝가능케한3대장 빅데이터 GPU 알고리즘 이제는식상한용어지만
 하여간있다! 다나와가서 사면된다! 아..
5.  뭔가옛날에뉴럴넷은배웠는데.. 혼자서공부하려고인터넷을뒤져보지만 빡셉니다… 예습,자습,복습-인간이할수없는세가지일
6.  일단단어들부터보통이아닙니다. ReLU DropOut MaxPooling Stochastic Gradient Decent Convolution SoftMax
 7.  근데이것도한번보시죠 McFlurry FrenchFries McMuffin Hash Browns BigMac
 8.  근데이것도한번보시죠 맥플러리 프렌치프라이 맥머핀 해시 브라운 빅맥 사실별거아닌건데외국인만난것처럼당황해서그렇습니다.
9.  이시간을통해,딥러닝도 편안하게느끼게되셨으면좋겠습니다. 조선시대조상님이맥도날드메뉴보면
 얼마나겁날까요? 근데사실그냥먹는이야기.별거없죠. 그분들도금방적응하실겁니다.
10.  딥러닝이글케좋아?
11.  컴퓨터에게그림을주고 개인지고양이인지판단하게하시오? 문제? 이프로그램어떻게짜지?
12.  (이제는식상한짤…이짤을쓰는내가부끄럽네요)
13.  딥러닝으로만든코드를봅시다.
14.  basedonhttps://github.com/fastai/courses
 15.  정확도98.35%!!
 16.  엄청잘맞춘다!!
17.  사진을보고개랑고양이를구분하는 신박한일을,달랑저짧은코드로할수있다!
18.  패러다임쉬프트 기존의코딩:
 조건을라인바이라인으로긴코드로써내려가는일 앞으로의코딩:
 조건을학습모델의여러가중치로변환하는일 IF ~~~~~~~~~~ IF ~~~~~~~~~~ IF ~~~~~~~~~~ IF ~~~~~~~~~~ 인풋 아웃풋 30.3 51.2 18.3 -30.2 14.9 7.9 인풋 아웃풋
19.  basedon https://github.com/fastai/courses 딥러닝의정수중의하나:VGG16 강의가끝날때쯤다이해갈겁니다^^
20.  일단뉴럴넷복습부터
21.  일단뉴럴넷의한컴포넌트는일케생겼었죠 sigmoid
 22.  요런게모여서이런게되었었습니다.
23.  계속층을쌓아나갈수도있습니다. 이렇게깊어지면딥뉴럴넷(DNN)이라하죠
24.  사람의뇌신경을닮은뉴럴넷이니 사람이하는거다할수있지않을까?! 그런데잘안됨
25.  세가지문제가있었다. 학습이잘안돼! 겨우되어도융통성이없다?! Underfitting 덜하거나 Overfitting 과하거나 (하여간적당히가없어요) 도대체학습은언제끝나는건가?Slow 느리거나
26.  Underfitting Overfitting 학습이잘안돼! 겨우되어도융통성이없다?! 덜하거나 과하거나 Slow 도대체학습은언제끝나는건가? 느리거나 차근차근해결해봅시다!
27.  Underfitting Overfitting 학습이잘안돼! 겨우되어도융통성이없다?! 덜하거나 과하거나 Slow 도대체학습은언제끝나는건가? 느리거나
28.  뭐를전달하는가? 현재내가틀린정도를‘미분(기울기)’한거 출력입력 입력 출력 미분하고,곱하고,더하고를역방향으로반복하며업데이트한다. 뉴럴넷의학습방법Backpropagation (사실별거없고그냥“뒤로전달”)
29.  근데문제는? 여기의미분(기울기)는뭐라도있다.다행 근데여기는기울기0..이런거중간에곱하면뭔가뒤로전달할게없다?! 그런상황에서이걸반복하면?????? 우리가activation함수로sigmoid 를썼다는것
30.  Vanishinggradient현상: 줄좀맞추자줄좀..줄..줄..줄.. 교장샘끝줄학생 레이어가깊을수록업데이트가사라져간다. 그래서fitting이잘안됨(underfitting) 학습이잘안됨
31.  ReLU 이녀석은양의구간에서전부미분값(1)이있다! 죽지않는activationfunc을쓰자! (RectifiedLinearUnits) 줄좀맞추자 교장샘끝줄학생 줄좀맞추자줄좀맞추자줄좀맞추자줄좀맞추자 사그라드는sigmoid대신 끝줄학생까지이야기가전달이잘되고위치를고친다!
32.  sigmoid->ReLU=뒤로전달오케이! 전달하다가,사그라져버린다(vanishinggradient) 문제? 해결!
33.  Underfitting Overfitting 학습이잘안돼! 겨우되어도융통성이없다?! 덜하거나 과하거나 Slow 도대체학습은언제끝나는건가? 느리거나
34.  GradientDecent lossfuncion의현가중치에서의기울기(gradient)를구해서 loss를줄이는방향으로 업데이트해나간다. 기존뉴럴넷이가중치parameter들을 최적화(optimize)하는방법
35.  뉴럴넷은loss(orcost)function을
 가지고있습니다.쉽게말하면“틀린정도” 현재가진weight세팅(내자리)에서, 내가가진데이터를다넣으면 전체에러가계산됩니다. 현지점의기울기
 (gradient) 거기서미분하면에러를줄이는방향을알수있습니다.
 (내자리의기울기*반대방향) 그방향으로정해진스텝량(learningrate)을 곱해서weight을이동시킵니다.이걸반복~~ weight의업데이트 = 에러낮추는방향
 (decent) XX 한발자국크기
 (learningrate)
 36.  아그렇구나. ..잠깐?이상한게지나갔는데?
37.  현재가진weight세팅(내자리)에서, 내가가진데이터를다넣으면 전체에러가계산됩니다. 현지점의기울기
 (gradient) 에러낮추는방향
 (decent) 한발자국크기
 (learningrate) 거기서미분하면에러를줄이는방향을알수있습니다.
 (내자리의기울기*반대방향) 그방향으로정해진스텝량(learningrate)을 곱해서weight을이동시킵니다.이걸반복~~ XXweight의업데이트 = “내가가진데이터를다넣으면?” 트레이닝데이터가몇억건인데… 한발자국갈때마다몇억건을넣어? 뉴럴넷loss(orcost)function을
 가지고있습니다.쉽게말하면“틀린정도”
38.  어느천년에다하는가. GD보다빠른옵티마이저는없을까? StochasticGradientDecent!!
 39.  SGD의컨셉:느린완벽보다조금만훓어보고일단빨리가봅시다. (이거랑 닮음. 하지만 done도 better도 perfect도 실패하는 우리네 삶.. ㅠㅠ)
40.  학습데이터 Gradient Decent Stochastic
 Gradient Decent 작은 토막마다 일단 1스텝간다. 전부다 읽고나서
 최적의 1스텝 간다. full-batch mini-batch mini-batch mini-batch mini-batch mini-batch
 41.  GDvsSGD 목적지 모든 걸 계산(1시간)후 
 최적의 한스텝 일부만 검토(5분) 틀려도 일단 간다! 빠른 스텝! 6스텝 * 1시간 = 6시간 11스텝 * 5분 = 55분 < 1시간 Gradient Decent Stochastic 
 Gradient Descent 최적인데 너무 느리다! 조금 헤매도 어쨌든 인근에 아주 빨리 갔다!
42.  걸음마다batch로전부다계산하려니 GD가너무오래걸린다 SGD로mini-batch마다움직여
 같은시간에훨씬더많이진행해서해결! 문제? 해결!
43.  다시생각해봐도이건,굴곡많은산을
 좋은오솔길을찾아잘내려가는일과참비슷
44.  근데미니배치를하다보니와리가리(?)방향문제가있다. 딱봐도더잘갈수있는데 훨씬더헤매면서간다. 훑기도잘훑으면서, 좀더휙휙더좋은방향으로갈순없을까?
45.  스텝사이즈(learningrate)도문제가된다. 보폭이너무작으면오래헤매고(파란라인) 보폭이너무크면,오솔길을지나친다(녹색라인)
46.  이과가또.jpg
 47.  산을잘타고내려오는것은 어느방향으로발을디딜지 얼마보폭으로발을디딜지 두가지를잘잡아야빠르게타고내려온다. SGD를더개선한멋진optimizer가많다! SGD의개선된후계자들
48.  여러가지방법이있다! http://imgur.com/NKsFHJb
 49.  산내려오는작은오솔길잘찾기(Optimizer)의발달계보 SGD Momentum NAG Adagrad RMSProp AdaDelta Adam Nadam 스텝계산해서움직인후,
 아까내려오던관성방향또가자 일단관성방향먼저움직이고,
 움직인자리에스텝을계산하니
 더빠르더라 안가본곳은성큼빠르게걸어훓고 많이가본곳은잘아니까 갈수록보폭을줄여세밀히탐색 보폭을줄이는건좋은데
 이전맥락상황봐가며하자. 종종걸음너무작아져서 정지하는걸막아보자. RMSProp+Momentum 방향도스텝사이즈도적절하게! 전부다봐야한걸음은 너무오래걸리니까
 조금만보고빨리판단한다
 같은시간에더많이간다 Adam에Momentum
 대신NAG를붙이자. 스 텝 사 이 즈 스텝방향 GD 모든자료를다검토해서 내위치의산기울기를계산해서
 갈방향을찾겠다. NesterovAcceleratedGradient
 50.  잘모르겠으면Adam!
 51.  SGD가빠른데좀헤맨다 SGD의개선된버전을골라 더빠르고더정확하게! 문제? 해결!
52.  Underfitting Overfitting 학습이잘안돼! 겨우되어도융통성이없다?! 덜하거나 과하거나 Slow 도대체학습은언제끝나는건가? 느리거나
53.  열심히뉴럴넷에게고양이 뚱뚱하니까고양이아님 갈색이니까고양이아님 귀처졌으니까고양이아님 를가르쳤더니.. 융통성이라곤눈꼽만큼도없다! Overfitting
 54.  뉴럴넷에게융통성을기르는방법은? 가르칠때부터,좀가리면서가르친다! DropOut! 학습시킬때, 일부러정보를누락시키거나 중간중간노드를끈다.
55.  얼굴위주 색지우고 귀빼고
56.  dropout으로 일부에집착하지않고 중요한요소가무엇인지 터득해나간다.
57.  과적합으로융통성이없다. DropOut으로 유연성을획득시킨다. 문제? 해결!
58.  Underfitting Overfitting 학습잘되고 융통성도생겼다! 덜하거나 과하거나 Slow 이젠빠르고 느리거나 문제해결완료!
59.  DropOut ReLU SGD Adam Adam Vanishinggradient LearningRate mini-batch RmsProp 딥러닝을가능하게한개념들을배웠다! 등등등~
60.  깊은뉴럴넷의학습이가능해졌다. 이제이것들을잘쌓아서일을해보자.
61.  문제의유형에따라적절한아키텍쳐를! 스냅샷성데이터 snapshot 시퀀스성데이터 sequence 이미지,영상,바둑(?) CNN Convolutional
 neuralnetwork 음성,언어,주식가격,맥락 LSTMrecurrent
 neuralnetwork LongShort TermMemory orRNN
 62.  아까봤던VGG도 유명한CNN구조중의하나. 이바닥에유명한녀석으로 AlexNet(구형),
 VGG(인기많고많이씀,그냥믿고쓰는허브솔트같은느낌),
 GoogleNet(첨에인기없고,뒤에Inception버전업되고좀씀),
 ResNet(레이어짱많음, 최근많이쓰임)
63.  이런거다어디서나오나요? 영상인식관련천하제일무술대회가있습니다. TheImageNetLargeScaleVisualRecognitionChallenge(ILSVRC) 길어서보통ImageNet대회라고합니다.ㅎㅎ 연구자들이자웅을겨루며,좋은구조가많이나왔습니다.
64.  최신 과거
65.  VGG는구조가직관적이고
 성능도상당히쓸만해서 대중적으로많이쓰입니다. (다른많은구조의재료가되곤합니다)
66.  VGGNET의구조 Imagefromhttp://file.scirp.org/Html/4-7800353_65406.htm 이해를하기위해,우리가그림을본다고상상해봅시다.
67.  그림을눈앞1cm거리에서본다고생각해보자. 처음에는점과선,이상한질감몇개밖에모르겠다.
68.  점과선,질감을충분히배우고,조금떨어져서보자. 점과선이질감이합쳐져삼각형,동그라미,북실함이보인다.
69.  삼각형,원,사각형,북실함등을조합해서보니 뾰족귀와땡그란눈과복실한발을배웠다.
70.  더멀리서보니,그것들이모아져있다.이것은? 고양이!!
71.  이방식을흉내내면컴퓨터도그림을잘볼수있겠지? 조각을보고,패턴을익히고,점점멀리서조합을본다.
72.  계산량측면에서도! 이미지에서는인근픽셀끼리만상관있지않나? 가까운것들끼리만묶어서계산하면의미도있고 계산량도줄겠는데? 이런생각을해봤다. 보통뉴럴넷은서로가서로에게전부다연결되어있는데 이러다보니맞춰야할weight들도많아..
73.  Convolution박스로밀고나면,숫자가나옴 그숫자를Activation(주로ReLU)에넣어나온값 Convolution:특정패턴이있는지박스로훓으며마킹 이걸로이미지지도를새로그린다. 위아래선필터,좌우선필터,대각선필터,이런질감필터,
 요런질감필터,동그라미필터등등여러가지“조각”필터로 해당패턴이그림위에있는지확인한다.
74.  이게Conv필터한개예제 이런걸밀고다닌다.
75.  사소하지만중요한거하나.Zeropadding 귀퉁이가짤리다보니,사이즈유지를위해conv전에0을모서리에보태고한다.
76.  Convolution의멋진점은 간단한필터들이쌓여가면서 엄청나게복잡한필터를만들어나가는것 이런필터를뉴럴넷이알아서찾아주는것
77.  Convolution의좋은점 부품을조립해더복잡한부품을만든다 Convolution Convolution Convolution 가 로 세로 필터수
78.  https://arxiv.org/pdf/1311.2901.pdf
 79.  점점더멀리서보는법? 우리가멀어져도되지만 그림을줄여도되겠구나?
80.  사이즈를점진적으로줄이는법MaxPooling nxn(Pool)을중요한정보(Max)한개로줄인다. 선명한정보만남겨서,판단과학습이쉬워지고
 노이즈가줄면서,덤으로융통성도확보된다. 4 3 3 2 1 0 0 8 0 1 2 2 2 7 9 1 4 8 7 9 보통2x2로화면전역에적용한다 stride라고해서
 좌우로몇칸씩뛸지설정.보통(2x2) 그러면절반짜리
 이미지가완성!
81.  패턴들을쌓아가며점차복잡한패턴을인식한다(conv) 사이즈를줄여가며,더욱추상화해나간다(maxpooling)
 82.  눈 눈 코 입 귀 목 티 티 티 후반부에는추상화부품으로남는다. 우리는궁극적으로 이런녀석을가지게된다. 시작은이렇게256*256
 픽셀을다보았어야해도 Conv와 MaxPooling
 의반복
83.  막판,추상화가끝난데이터를FC에넣어판단한다 (fully connected layer)
 84.  눈 눈 코 입 귀 목 티 티 티 눈과코와귀가있고 티를입고있으니 최종판단은FullyConnectedLayer에게먹여서하게한다. “사람” “고양이” “개” “말” X X O X
 85.  뉴럿넷에게답을회신받는3가지방법 output을
 그냥받는다. output에 sigmoid를먹인다. output에 softmax를먹인다. O/X 기냐?아니냐? Category 종류중에요건뭐냐? Value 이게얼마가될거같니?
86.  그래서1000개종류분류하는 아키텍쳐는 끝이SoftMax로되어있다.
87.  이제다시처음의코드를봅시다!
88.  Conv블럭은 1)사이즈안줄어들게가장자리채워주고 2)3x3사이즈패턴으로, 
 filter갯수만큼패턴을찾겠구나.
 activation은ReLU를쓰네? 3)그런Conv를layes수만큼겹겹히쌓는구나. 4)그렇지.충분히했으면사이즈줄여줘야지
89.  Conv+MaxPooling덩어리를
 필터갯수늘리면서
 그림사이즈는점점줄어들게
 쌓아올리는구만. 이걸FC에먹이려고좌악펴주고
90.  1)출력4096짜리,
 FullyConnectedNN이군 2)ReLU썼고 3)그렇지.오버피팅방지로DropOut들어가야지 FC블럭은
91.  마지막엔1000개출력인데, 그중하나고르는(Category)니까softmax구만 그렇지.길찾는법은믿고쓰는Adam이지.
92.  Clear!!!!!!
 93.  축하드립니다! 여러분은지금실제돌아가는코드를 왜그런지를알면서 읽어낼수있게되었어요! 인스톨완료!
94.  부분부분만공부하면어렵게느껴지던딥러닝 왜그렇게만들어졌는지를따져보면구조가그려집니다. 구조를알면어렵지않아요. (LSTM편과강화학습편은다음에또선보일게요 그리고저희사람뽑습니다.곧공고할게요~~)

반응형