-
Notifications
You must be signed in to change notification settings - Fork 210
/
Lecture 5 Convolutional Neural Networks.ko.srt
2548 lines (1994 loc) · 69.2 KB
/
Lecture 5 Convolutional Neural Networks.ko.srt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
0
00:00:00,000 --> 00:00:06,000
Translated by visionNoob, KNU
https://github.com/insurgent92/CS231N_17_KOR_SUB
1
00:00:08,435 --> 00:00:10,602
자 시작합시다.
2
00:00:13,372 --> 00:00:21,193
이제 5강입니다. 5강에서는 CNN을 배우겠습니다.
3
00:00:22,493 --> 00:00:25,933
시작하기 전에 몇가지 공지사항이 있습니다.
4
00:00:25,933 --> 00:00:30,563
첫 번째 과제가 4월 20일 목요일 21:59분에 마감됩니다.
5
00:00:31,440 --> 00:00:35,607
그리고 그때 두 번째 과제가 나갈 예정입니다.
6
00:00:38,320 --> 00:00:40,434
우선 지난 강의를 복습해 봅시다.
7
00:00:40,434 --> 00:00:48,337
지난 몇차례 동안 Neural Networks와 선형 함수들을 살펴보았습니다.
8
00:00:48,337 --> 00:00:56,969
선형 레이어를 쌓고 그 사이에 비선형 레이어를 추가하여
Neural Network를 만들었습니다.
9
00:00:56,969 --> 00:01:01,500
또한 NN은 "Mode 문제" 를 해결할 수 있습니다.
10
00:01:01,500 --> 00:01:06,618
가령 다양한 종류의 자동차를 올바르게 분류하기 위해
"중간 단계의 템플릿"을 학습시키는 것이죠.
11
00:01:06,618 --> 00:01:09,006
빨간색 차 노란색 차 등을 말이죠.
12
00:01:09,006 --> 00:01:14,790
그리고 이 템플릿들을 결합해서
최종 클래스 스코어를 계산합니다.
13
00:01:14,790 --> 00:01:18,438
오늘은 CNN에 대해 말해보고자 합니다.
14
00:01:18,438 --> 00:01:20,825
기존의 NN과 같은 부류이긴 하지만
15
00:01:20,825 --> 00:01:23,300
이번에는 Convolutional Layer에 대해 배울 것입니다.
16
00:01:23,300 --> 00:01:29,217
이 레이어는 기본적으로 "공간적 구조"를 유지합니다.
17
00:01:31,817 --> 00:01:36,070
우선, Neural Networks에 대해 조금 얘기해 보려 합니다.
18
00:01:36,070 --> 00:01:39,067
그리고 CNN의 역사도 알아볼 것입니다.
19
00:01:39,067 --> 00:01:46,308
우선 1957년으로 돌아가보면, Frank Rosenblatt가
Mark I Perceptron machine 을 개발했습니다.
20
00:01:46,308 --> 00:01:51,785
이 기계는 "perceptron"을 구현한 최초의 기계입니다.
21
00:01:51,785 --> 00:01:58,437
"Perceptron"은 우리가 배운 Wx + b 와
유사한 함수를 사용합니다.
22
00:01:58,437 --> 00:02:02,000
하지만 여기에서는 출력 값이 1 또는 0입니다.
23
00:02:02,000 --> 00:02:06,551
여기에서도 가중치 W를 Update 하는
Update Rule이 존재합니다.
24
00:02:06,551 --> 00:02:12,304
이 Update Rule은 Backprop과 유사합니다.
25
00:02:12,304 --> 00:02:22,349
하지만 당시에는 backprob이라는 개념이 없어서, 단지 W를
이리저리 조절하면서 맞추는 식이었죠
26
00:02:23,771 --> 00:02:29,673
그리고 1960년에는 Widrow와 Hoff가 \
Adaline and Madaline을 개발했습니다.
27
00:02:29,673 --> 00:02:37,457
이는 최초의 Multilayer Perceptron Network 이었습니다.
28
00:02:38,986 --> 00:02:46,658
이 시점에서야 비로소 Neural network와 비슷한
모양을 하기 시작하긴 했지만
29
00:02:46,658 --> 00:02:50,992
아직 Backprob같은 학습 알고리즘은 없었습니다.
30
00:02:50,992 --> 00:02:56,015
최초의 Backporp은 1986에 Rumelhart가 제안하였습니다.
31
00:02:56,015 --> 00:03:03,906
보시다시피 우리에게 익숙한
Chain rule과 Update rule을 볼 수 있습니다.
32
00:03:03,906 --> 00:03:09,874
이때 최초로 network를 학습시키는 것에 관한
개념이 정립되기 시작했습니다.
33
00:03:11,623 --> 00:03:18,076
하지만 그 이후로 NN을 더 크게 만들지는 못했습니다.
34
00:03:18,076 --> 00:03:26,237
그리고 한동안은 새로운 이론이 나오지 못했고
널리 쓰이지도 못 했습니다.
35
00:03:26,237 --> 00:03:32,790
그래서 2000년대가 되서야 다시 활기를 찾기 시작했습니다.
36
00:03:33,641 --> 00:03:40,719
Geoff Hinton 과 Ruslan Salakhutdinov의 2006년
논문에서 DNN의 학습가능성을 선보였고
37
00:03:40,719 --> 00:03:43,212
그것이 실제로 아주 효과적이라는 것을 보여주었습니다.
38
00:03:43,212 --> 00:03:47,428
하지막 그 때 까지도 아직 모던한 NN는 아니었습니다.
39
00:03:47,428 --> 00:03:52,439
backprop이 가능하려면 아주 세심하게
초기화를 해야 했습니다.
40
00:03:52,439 --> 00:03:57,601
그래서 여기에서는 전처리 과정이 필요했고
41
00:03:57,601 --> 00:04:07,331
초기화를 위해 RBM을 이용해서 각 히든레이어 가중치를
학습시켜야 했습니다.
42
00:04:07,331 --> 00:04:20,224
이렇게 초기화된 히든 레이어를 이용해서 전체 신경망을
backprop하거나 fine tune하는 것이었습니다.
43
00:04:23,057 --> 00:04:39,233
실제로 NN의 광풍이 불기 시작한 때는 2012년 이었습니다.
44
00:04:40,268 --> 00:04:44,980
NN이 음성 인식에서 아주 좋은 성능을 보였습니다.
45
00:04:44,980 --> 00:04:50,606
이는 Hintin lab에서 나온 것인데 acoustic modeling과
speech recognition에 관한 것이었습니다.
46
00:04:50,606 --> 00:04:58,604
또한 2012년에는 Hinton lab의 Alex Krizhevsky에서
영상 인식에 관한 landmark paper가 하나 나옵니다.
47
00:04:59,638 --> 00:05:06,813
이 논문에서는 ImageNet Classification에서 최초로 NN을
사용했고, 결과는 정말 놀라웠습니다.
48
00:05:06,813 --> 00:05:15,519
AlexNet은 ImageNet benchmark의 Error를
극적으로 감소시켰습니다.
49
00:05:16,793 --> 00:05:24,236
그 이후로 ConNets은 아주 널리 쓰이고 있습니다.
50
00:05:24,236 --> 00:05:31,714
다시 돌아가서 구체적으로 "CNN이 어떻게 유명해졌는지"
에 대해 한 번 알아보도록 하겠습니다.
51
00:05:31,714 --> 00:05:42,538
다시 1950년대로 돌아가보면 Hubel과 Wiesel이 일차시각피질의
뉴런에 관한 연구를 수행했습니다.
52
00:05:42,538 --> 00:05:45,579
고양이에게 실험을 했습니다.
53
00:05:45,579 --> 00:05:53,526
첫 수업에서도 이야기하긴 했지만, 고양이의 뇌에 전극을
꽂았습니다.
54
00:05:53,526 --> 00:05:56,066
그리고 고양이에게 다양한 자극을 주며 실험을 했습니다.
55
00:05:56,066 --> 00:06:06,937
이 실험에서 뉴런이 oriented edges와 shapes같은 것에
반응한다는 것을 알아냈습니다.
56
00:06:09,029 --> 00:06:14,993
그리고 이 실험에서 내린 몇 가지 결론은 아주 중요했습니다.
57
00:06:14,993 --> 00:06:19,534
그중 하나는 바로 피질 내부에
지형적인 매핑(topographical mapping)이 있다는 것입니다.
58
00:06:19,534 --> 00:06:24,932
피질 내 서로 인접해 있는 세포들은 visual field내에
어떤 지역성을 띄고 있습니다.
59
00:06:24,932 --> 00:06:34,475
오른쪽 그림은 보면 해당하는 spatial mapping을 볼 수 있습니다.
60
00:06:34,475 --> 00:06:41,722
그리고 중심에서 더 벗어난 파란색 지역도 볼 수 있습니다.
61
00:06:41,722 --> 00:06:46,789
또한 이 실험에서 뉴런들이 계층구조를 지닌다는 것도 반견했습니다.
62
00:06:47,634 --> 00:06:57,837
다양한 종류의 시각자극을 관찰하면서 시각 신호가 가장 먼저
도달하는 곳이 바로 Retinal ganglion 이라는 것을 발견합니다.
63
00:06:57,837 --> 00:07:01,601
Retinal ganglion cell은 원형으로 생긴 지역입니다.
64
00:07:01,601 --> 00:07:11,146
가장 상위에는 Simple cells이 있는데, 이 세포들은 다양한
edges의 방향과 빛의 방향에 반응했습니다.
65
00:07:11,146 --> 00:07:15,448
그리고 더 나아가, 그런 Simple Cells 이
Complex cells과 연결되어 있다는 것을 발견했습니다.
66
00:07:15,448 --> 00:07:19,923
Complex cells는 빛의 방향 뿐만 아니라 움직임에서 반응했습니다.
67
00:07:19,923 --> 00:07:28,984
복잡도가 증가함게 따라, 가령 hypercomplex cells은
끝 점(end point) 과 같은것에 반응하게 되는 것입니다.
68
00:07:28,984 --> 00:07:34,175
이런 결과로부터 "corner" 나 "blob"에 대한
아이디어를 얻기 시작한 것입니다.
69
00:07:38,143 --> 00:07:52,454
1980의 neocognitron은 Hubel과 Wiesel이 발견한
simple/complex cells의 아이디어를 사용한 최초의 NN입니다.
70
00:07:52,454 --> 00:07:59,038
Fukishima는 simple/complex cells을 교차시켰습니다.
(SCSCSC..)
71
00:07:59,038 --> 00:08:03,129
Simple cells은 학습가능한 parameters를 가지고 있고
72
00:08:03,129 --> 00:08:12,958
Complex cells은 pooling과 같은 것으로 구현했는데
작은 변화에 Simple cells보다 좀 더 강인합니다.
73
00:08:14,786 --> 00:08:17,159
지금까지는 1980년대 까지의 업적이었습니다.
74
00:08:17,159 --> 00:08:27,743
1998년 Yann LeCun이 최초로 NN을 학습시키기 위해
Backprob과 gradient-based learning을 적용했고
75
00:08:27,743 --> 00:08:32,063
실제로 그 방법은 문서인식에 아주 잘 동작했습니다.
76
00:08:32,063 --> 00:08:37,610
그리고 우편번호의 숫자를 인식하는데도 아주 잘 동작했습니다.
77
00:08:37,610 --> 00:08:45,082
그리고 실제 우편 서비스에서 우편번호 인식에
널리 쓰였습니다.
78
00:08:45,082 --> 00:08:56,350
하지만 아직 이 Network를 더 크게만들 수는 없었습니다.
그리고 숫자 라는 데이터는 단순했습니다.
79
00:08:56,350 --> 00:09:08,900
2012년 Alex Krizhevsky가 CNN의 현대화 바람을 이르켰습니다.
이 Network는 AlexNet이라고도 불립니다.
80
00:09:08,900 --> 00:09:21,751
Yann LeCun의 CNN과 크게 달라보이진 않습니다.
다만 더 크고 깊어진 것입니다.
81
00:09:21,751 --> 00:09:37,724
가장 중요한 점은 지금은 ImageNet dataset과 같이 대규모의
데이터를 활용할 수 있다는 것입니다. 또한 GPU의 힘도 있었습니다.
82
00:09:37,724 --> 00:09:41,033
나중에 더 자세히 다루도록 하죠
83
00:09:41,033 --> 00:09:45,434
다시 오늘날로 돌아와보면
ConvNets은 모든 곳에 쓰입니다.
84
00:09:45,434 --> 00:09:55,188
AlexNet의 ImageNet 데이터 분류 결과를 살펴보자면
이미지 검색에 정말 좋은 성능을 보이고 있습니다.
85
00:09:55,188 --> 00:10:04,134
가령 꽃을 검색하는 것을 보면 학습된 특징이 유사한 것을
매칭시키는데 아주 강력하다는 것을 볼 수 있습니다.
86
00:10:04,134 --> 00:10:07,049
Detection에서도 ConvNet을 사용합니다.
87
00:10:07,049 --> 00:10:17,705
영상 내에 객체가 어디에 있는지를 아주 잘 찾아냅니다.
버스나 보트 등을 찾아내고 네모박스를 정확하게 그립니다.
88
00:10:17,705 --> 00:10:26,112
그리고 그보다 더 어려운 일들도 할 수 있는데 segmentation
은 단지 네모박스만 치는 것이 아니라
89
00:10:26,112 --> 00:10:32,125
나무나 사람 등을 구별하는데
픽셀 하나 하나에 모두 레이블링하는 것입니다.
90
00:10:34,126 --> 00:10:38,864
이런 알고리즘은 자율주행 자동차에 사용할 수 있습니다.
91
00:10:38,864 --> 00:10:48,812
대부분의 작업은 GPU가 수행할 수 있으며, 병렬처리를 통해
ConvNet을 아주 효과적으로 훈련하고 실행시킬 수 있습니다.
92
00:10:48,812 --> 00:10:59,207
자율 주행에 들어가는 임베디드 시스템에서도 동작할 뿐만 아니라
최신의 GPU에서도 가능합니다.
93
00:10:59,207 --> 00:11:03,399
이는 모두 Convnet 을 활용할 수 있는 다양한
애플리케이션의 예라고 할 수 있습니다.
94
00:11:03,399 --> 00:11:10,394
얼굴인식의 예를 보면 얼굴 이미지를 입력으로 받아서
이 사람이 누구인지에 대한 확률을 추정할 수 있습니다.
95
00:11:12,626 --> 00:11:25,951
ConvNets을 비디오에도 활용할 수 있는데, 단일 이미지의
정보 뿐만 아니라 시간적 정보도 같이 활용하는 방법입니다.
96
00:11:25,951 --> 00:11:32,770
또한 pose recognition도 가능합니다. 어깨나 팔꿈치와 같은
다양한 관절들을 인식해 낼 수 있습니다.
97
00:11:32,770 --> 00:11:42,234
여기 우리 조교 Lane의 이미지가 있습니다.
다양하고 비 정형적인 사람의 포즈를 아무 잘 잡아냅니다.
98
00:11:42,234 --> 00:11:48,465
오늘날 ConvNets을 이용한 pose recognotion은
아주 잘 동작합니다.
99
00:11:48,465 --> 00:11:51,741
Convnet을 가지고 게임도 할 수 있습니다.
100
00:11:51,741 --> 00:11:58,595
더 깊은 강화학습을 통해서 Atari 게임을 하거나
바둑을 두는 모습을 보신 적이 있을 것입니다.
101
00:11:58,595 --> 00:12:02,981
ConvNets은 이 모든 일들에서
아주 중요한 역할을 합니다.
102
00:12:02,981 --> 00:12:10,150
또다른 예로는 의학 영상을 가지고 해석을 하거나
진단을 하는데도 이용할 수 있습니다.
103
00:12:10,150 --> 00:12:14,317
또한 은하를 분류하거나 표지판을 인식하는데도 쓰입니다.
104
00:12:18,059 --> 00:12:22,342
최근의 Kaggle Chanllange에서는
고래를 분류하는 것도 있었습니다.
105
00:12:22,342 --> 00:12:33,249
또한 항공지도를 가지고 어디가 길이고 어디가 건물인지를
인식하기도 합니다.
106
00:12:35,089 --> 00:12:41,587
Classification이나 Detection에서 좀 더 나아가는 방법도
있습니다. Image Captioning같은 방법이죠
107
00:12:41,587 --> 00:12:48,644
이미지가 주어지면 이미지에 대한 설명을
문장으로 만들어 내는 것입니다.
108
00:12:48,644 --> 00:12:52,819
아마 나중에 배우게 될 것입니다.
109
00:12:52,819 --> 00:13:01,251
또한 Neural Network를 이용해 간지나는 예술작품도
만들어 낼 수 있습니다.
110
00:13:01,251 --> 00:13:12,412
왼쪽에 Deep Dream 알고리즘의 결과를 볼 수 있는데
다양한 어떤 객체가 보이고 약빨고 만든듯한 느낌을 줍니다
111
00:13:12,412 --> 00:13:23,808
또한 Style Transfer라는 방법은 원본 이미지를 가지고
특정 화풍으로 다시 그려주는 알고리즘도 있습니다.
112
00:13:23,808 --> 00:13:33,370
가령 맨 오른쪽은 반 고흐의 별의 빛나는 밤의 화풍으로 바뀐 것입니다.
113
00:13:33,370 --> 00:13:38,239
Jstin이 이와 관련된 연구를 많이 합니다.
만약 이에 관심이 있다면
114
00:13:38,239 --> 00:13:46,244
여기 예제 모두 Justin이 만든 코드이기 때문에
가서 물어보면 될 것입니다.
115
00:13:46,244 --> 00:13:52,727
지금까지는 오늘날 ConvNets이 어떻게 사용되는지
간략하게 한 번 알아보았습니다.
116
00:13:52,727 --> 00:13:55,289
물론 이보다 더 많은 일들을 할 수 있을 것입니다.
117
00:13:55,289 --> 00:14:06,465
때문에 여러분도 무수히 많은 상상을 할 수 있을 것이고
저는 개인적으로 여러분들의 프로젝트가 몹시 기대됩니다.
118
00:14:06,465 --> 00:14:10,307
오늘은 Convolutional Neural Network가 어떻게
작동하는지를 살펴 볼 것입니다.
119
00:14:10,307 --> 00:14:22,835
이번에 CNN의 첫 시간이니, CNN이 어떻게 동작하는지에 대해서만 간단하게
이야기해 볼 것입니다.
120
00:14:25,453 --> 00:14:31,444
지난 강의에서 Fully Connected Layer에 대한
아이디어를 소개해 드렸습니다
121
00:14:32,878 --> 00:14:36,257
그리고 완전히 연결된 레이어의 경우
122
00:14:36,257 --> 00:14:48,443
FC Layer에서 하는 일은 어떤 벡터를 가지고 연산을 하는 것이었습니다.
우선 입력으로 32 x 32 x 3 의 이미지가 있었습니다.
123
00:14:48,443 --> 00:14:56,787
그리고 이 이미지를 길게 펴서
3072차원의 벡터로 만들었습니다.
124
00:14:56,787 --> 00:15:01,741
그리고 가중치 W가 있어서 벡터와 곱했습니다. (Wx)
125
00:15:01,741 --> 00:15:05,908
이 예시에서는 W가 10x3072 행렬입니다.
126
00:15:07,264 --> 00:15:13,943
그리고 activation 을 얻습니다.
이 Layer의 출력입니다.
127
00:15:13,943 --> 00:15:20,389
10개의 행으로 되어있는데 3072 차원의 입력와
내적을 한 결과라고 할 수 있습니다.
128
00:15:22,207 --> 00:15:27,892
그러면 어떤 숫자 하나를 얻게 되는데
이는 그 Neuron의 한 값이라고 할 수 있습니다.
129
00:15:27,892 --> 00:15:32,270
이 예시의 경우 10개의 출력이 있게 됩니다.
130
00:15:35,417 --> 00:15:44,165
Convolution Layer와 기존의 FC레이어의 주된 차이점이 있다면
Convolution Layer는 기존의 구조를 보존시킨다는 것입니다.
131
00:15:44,165 --> 00:15:57,750
기존의 FC Layer가 입력 이미지를 길게 쭉 폈다면
이제는 기존의 이미지 구조를 그대로 유지하게 됩니다.
132
00:15:57,750 --> 00:16:01,910
그리고 이 작은 필터가 우리가 가진 가중치가 되는 것이고
133
00:16:01,910 --> 00:16:13,153
이 예시에서는 5x5x3 필터가, 이 필터를 가지고 이미지를
슬라이딩하면서 공간적으로 내적을 수행하게 됩니다.
134
00:16:13,153 --> 00:16:17,320
이제 이것을 어떻게 수행하는지 자세하게 알아보겠습니다.
135
00:16:18,668 --> 00:16:23,957
우선 필터는 입력의 깊이(Depth)만큼 확장됩니다.
136
00:16:23,957 --> 00:16:33,425
여기에서 하나의 필터는 아주 작은 부분만 취할 수 있습니다.
전체 32x32 이미지의 5x5 만 취하는 것입니다.
137
00:16:33,425 --> 00:16:42,499
하지만 깊이를 보면 전체 깊이를 전부 취합니다.
여기에서는 5 x 5 x 3 가 되는 것입니다.
138
00:16:42,499 --> 00:16:52,901
이제 이 필터를 가지고 전체 이미지에 내적을 시킬 적입니다.
139
00:16:52,901 --> 00:16:58,636
이 필터를 이미지의 어떤 공간에 겹쳐놓고 내적을 수행합니다.
140
00:16:58,636 --> 00:17:09,732
그리고 필터의 각 w와, 이에 해당하는 이미지의 픽셀을 곱해줍니다.
141
00:17:09,733 --> 00:17:18,755
여기에 필터가 5 x 5 x 3 라는건 그만큼 곱셈연산을 한다는 것입니다.
물론 bias term도 하나 들어가겠지만요
142
00:17:18,755 --> 00:17:26,491
여기에서는 기본적으로 W^tx + b를 수행하는 것입니다.
143
00:17:27,722 --> 00:17:31,771
이해했나요?
질문있나요
144
00:17:31,771 --> 00:17:34,521
[학생이 질문]
145
00:17:35,656 --> 00:17:40,722
그럼 여기에서 내적을 할때는
5x5x3짜리 긴 벡터를 사용하는 것입니까? 입니다.
146
00:17:40,722 --> 00:17:42,907
맞습니다. 엄밀히 말하면 그렇습니다.
147
00:17:42,907 --> 00:17:57,891
각 원소끼리 Convolution 을 하는 거나 그것을 쭉 펴서
내적을 하는거나 똑같은 일을 하는 것입니다.
148
00:17:57,891 --> 00:18:01,111
다른 질문 있으십니까?
149
00:18:01,111 --> 00:18:03,867
[학생이 질문]
150
00:18:03,867 --> 00:18:07,997
질문은 바로 왜 W를 Transpose하는지에 대한
직관이 있습니까? 하는 것입니다.
151
00:18:07,997 --> 00:18:15,978
그런것은 따로 없습니다. 내적을 수학적으로 표현하기 위해서
표현만 그렇게 한 것일 뿐입니다.
152
00:18:15,978 --> 00:18:29,593
이는 W를 어떻게 표현하느냐의 차이일 뿐입니다.
단지 행벡터를 만들어 주려고 Transpose를 하는 것입니다.
153
00:18:29,593 --> 00:18:31,989
하지만 여기에 어떤 직관은 없습니다.
154
00:18:31,989 --> 00:18:42,862
W를 펴서 D차원 벡터로 만들어보면 내적을 하려면
다시 내적을 1 x N 행벡터로 만들어 줘야 겠죠
155
00:18:42,862 --> 00:18:45,612
[학생이 질문]
156
00:18:48,263 --> 00:18:49,829
그래, 문제는
157
00:18:49,829 --> 00:18:53,996
그럼 여기에서 W가 의미하는것은 5x5x3 가 아니라
1 x 75 인 것입니까? 입니다.
158
00:18:55,180 --> 00:19:02,550
네 맞습니다. Wx에 대해 생각해보면 우선 내적을 수행하기 앞서
W를 길게 펼 것입니다.
159
00:19:02,550 --> 00:19:09,629
다시말해 5x5x3의 입력값 x더 길게 펴진 벡터의 형태가 되겠죠
160
00:19:10,913 --> 00:19:16,706
이전 질문과도 유사한데요
161
00:19:16,706 --> 00:19:27,527
필터를 이미지에 겹쳐놓고 해당하는 값들을 서로 곱합니다
우리가 보기 좋으라고 저렇게 표현을 해 놨지만
162
00:19:27,527 --> 00:19:35,061
실제로는 모두 펴서 벡터간 내적을 구하는 것입니다.
163
00:19:35,061 --> 00:19:36,311
질문있나요?
164
00:19:37,232 --> 00:19:40,740
[학생이 질문]
165
00:19:40,740 --> 00:19:46,760
질문은 바로 필터를 이미지에 어떻게 슬라이딩 하는지 입니다.
그건 앞으로 배울 내용입니다.
166
00:19:46,760 --> 00:19:49,510
[학생이 질문]
167
00:19:52,071 --> 00:20:00,178
질문은 엄밀하게 Convolution을 수행하려면
커널에 180도 회전되어야 하지 않느냐는 것입니다.
168
00:20:00,178 --> 00:20:09,451
Convolution의 수식을 후에 볼 것이지만 여기에서의 Conv는
좀 더 느슨한 정의라고 할 수 있습니다.
169
00:20:09,451 --> 00:20:18,738
신호처리 분야에서의 convolution은 실제로
필터를 뒤집은 다음에 연산을 수행합니다.
170
00:20:18,738 --> 00:20:27,983
하지만 CNN의 Convolution은 의미적인 요소만 가져온
것이기 때문에 걱정하지 않으셔도 됩니다.
171
00:20:27,983 --> 00:20:37,246
이떤 분이 질문했던, 어떻게 슬라이딩을 하는지에 대해 알아보겠습니다.
172
00:20:37,246 --> 00:20:49,975
Convolution은 이미지의 좌상단부터 시작하게 됩니다.
그리고 필터의 중앙을 값들을 모으게 됩니다.
173
00:20:49,975 --> 00:20:57,511
필터의 모든 요소를 가지고 내적을 수행하게 되면
하나의 값을 얻게됩니다.
174
00:20:57,511 --> 00:21:00,927
그리고 슬라이딩하게 됩니다.
175
00:21:00,927 --> 00:21:09,442
Conv연산을 수행하는 값들을 다시 Output activation map의
해당하는 위치에 저장하게 됩니다.
176
00:21:10,352 --> 00:21:15,532
여기 보면 입력 이미지와 출력 activation map의 차원이
다르다는 것을 알 수 있습니다.
177
00:21:15,532 --> 00:21:20,126
입력은 32 x 32 이고 출력은 28 x 28 이죠
178
00:21:20,126 --> 00:21:26,364
그래서 우리는 나중에 수학에 대해 설명 할 것입니다. 이 방법이
차원 적으로 어떻게 작동하는지 정확히 알 수 있습니다.
179
00:21:26,364 --> 00:21:31,393
기본적으로는 어떻게 슬라이딩을 할 것인지를
선택할 수 있습니다.
180
00:21:31,393 --> 00:21:41,326
슬라이딩여부와 관계없이 입력 값을 두 개씩 뽑아서
연산을 수행할 수도 있을 것입니다.
181
00:21:41,326 --> 00:21:48,990
출력 행렬의 크기는 슬라이드를 어떻게 하느냐에 따라 다르게됩니다.
하지만 기본적으로는 하나씩 연산을 수행합니다.
182
00:21:50,180 --> 00:21:58,141
하나의 필터를 가지고 전체 이미지에 Convolution
연산을 수행합니다.
183
00:21:58,141 --> 00:22:04,731
그러면 activation map이라는 출력값을 얻게 되는 것입니다.
184
00:22:04,731 --> 00:22:16,250
보통 Convolution Layer에서는 여러개의 필터를 사용합니다.
왜냐하면 필터마다 다른 특징을 추출하고 싶기 때문입니다.
185
00:22:16,250 --> 00:22:26,359
따라서 우리는 보통 여러개의 필터를 사용합니다. 가령 여기에
두 번째 필터가 있습니다. 초록색의 5 x 5 x 3 필터입니다.
186
00:22:26,359 --> 00:22:37,425
이 녹색 필터를 연산하고 나면, 앞서 계산했던 activate map과
같은 크기의 새로운 map이 만들어집니다.
187
00:22:40,081 --> 00:22:43,553
우리는 한 Layer에서 원하는 만큼 여러개의 필터를
사용할 수 있습니다.
188
00:22:43,553 --> 00:22:51,698
가령 5 x 5 필터가 6개가 있다면
총 6개의 activation map을 얻게 될 것입니다.
189
00:22:51,698 --> 00:22:58,368
출력 map의 크기는 28 x 28이 되겠죠.
190
00:23:01,607 --> 00:23:11,152
이 CNN을 어떻게 활용할 지를 조금 말씀드려보면
이런식으로 Cov Layer들의 연속된 형태가 될 것입니다.
191
00:23:11,152 --> 00:23:16,676
그리고 각각을 쌓아 올리게 되면 보시는 것과 같이
간단한 Linear Layer로 된 Neural Network가 됩니다.
192
00:23:16,676 --> 00:23:23,057
이제는 그 사이 사이에 activation function을 넣을 것입니다.
가령 ReLU 같은 것들을 사용할 수 있겠죠.
193
00:23:24,503 --> 00:23:31,257
그렇게 되면 Conv-ReLU 가 반복되겠죠
그리고 가끔은 pooling layer도 들어갑니다.
194
00:23:31,257 --> 00:23:40,465
그리고 각 Layer의 출력은 다음 Layer의 입력이 됩니다.
195
00:23:43,638 --> 00:23:52,957
그리고 말씀드렸듯 각 Layer는 여러개의 필터를 가지고 있습니다.
그리고 각 필터마다 각각의 출력 map을 만듭니다.
196
00:23:52,957 --> 00:24:01,175
그러므로 여러개의 Layer들을 쌓고나서 보면 결국
각 필터들이 계층적으로 학습을 하는것을 보게됩니다.
197
00:24:01,175 --> 00:24:09,257
앞쪽에 있는 필터들은 low-level feature를 학습하게 됩니다.
Edge와 같은것들이 보입니다.
198
00:24:09,257 --> 00:24:19,113
Mid-level을 보면 좀더 복잡한 특징을 가지게 됩니다.
코너나 blobs 등과 같이 보입니다.
199
00:24:19,113 --> 00:24:25,852
그리고 high-level features를 보면 좀 더 객체와 닮은 것들이
출력으로 나오는 것을 볼 수 있습니다.
200
00:24:25,852 --> 00:24:35,561
나중 수업에서 객 특징을 어떻게 시각화하는지, 그리고 특징들이
어떻게 학습되는지를 살펴보겠습니다.
201
00:24:35,561 --> 00:24:46,967
여기에서 이해하고 넘어가야 하는 것은 특징이 어떻게 생겼고,
Layer의 계층에 따라 단순/복잡한 특징을이 존재한다는 것을 아는 것입니다.
202
00:24:48,305 --> 00:24:49,138
[학생이 질문]
203
00:24:49,138 --> 00:25:03,113
질문은 바로 필터의 Depth를 늘리는데 어떤 직관을 가져야 하는지 입니다.
204
00:25:03,113 --> 00:25:08,814
이 예시에서 처음에는 3개의 필터가 그 다음에는
6개의 필터가 있었습니다.
205
00:25:08,814 --> 00:25:17,255
이는 어떻게 모델을 디자인해야 되는지의 문제인데
실제로는 어떤것이 더 좋은지를 찾아내야 합니다.
206
00:25:17,255 --> 00:25:28,344
나중 수업에서 다양한 CNN 아키텍쳐를 살펴보면서 왜 어떤
모델이 더 좋은지를 살펴볼 것입니다.
207
00:25:28,344 --> 00:25:33,238
하지만 기본적으로 여러분은 아주 다양하 방법으로
CNN 모델을 디자인할 수 있습니다.
208
00:25:33,238 --> 00:25:39,611
필터 사이즈라던가 Stride, 그리고 얼마나 많은 필터를
사용할지 등을 말이죠. 다음에 다시 이야기하겠습니다.
209
00:25:39,611 --> 00:25:41,246
질문있나요?
210
00:25:41,246 --> 00:25:43,996
[학생이 질문]
211
00:25:50,300 --> 00:26:00,177
질문은 바로 우리가 전체 이미지를 슬라이딩 하면서 필터링을 하는데
이미지의 가장자리는 필터가 덜 적용되지 않냐는 것입니다.
212
00:26:00,177 --> 00:26:07,900
아주 좋은 질문 입니다. 그리고 어떻게 그것을 다시 보완해야
하는지가 앞으로 할 내용입니다. (ex zero-padding)
213
00:26:12,009 --> 00:26:26,228
지금까지는 Conv Layer를 계층적으로 쌓아서 단순한 특징을을 뽑고
그것을 또 조합해서 더 복잡한 특징으로 활용했습니다.
214
00:26:26,228 --> 00:26:32,549
그리고 이는 Hubel과 Wiesel의 이론과도 잘 맞습니다.
215
00:26:32,549 --> 00:26:39,532
네트워크에 앞쪽에서는 단순한 것들일 처리하고
뒤로 갈수록 점점 더 복잡해 지는 식이죠
216
00:26:39,532 --> 00:26:55,041
우리는 그것을 강제로 학습시킨 것이 아니라 계층적 구조를 설계하고