-
Notifications
You must be signed in to change notification settings - Fork 212
/
Copy pathLecture 9 CNN Architectures.ko.srt
2878 lines (2259 loc) · 78.9 KB
/
Lecture 9 CNN Architectures.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:14,752 --> 00:00:21,696
9강입니다. 오늘은 CNN 아키텍쳐들을
한번 알아보겠습니다.
2
00:00:21,696 --> 00:00:27,706
수업에 앞서 몇 가지 공지사항을 전달해 드리겠습니다.
우선 과제 2는 목요일까지 입니다.
3
00:00:27,706 --> 00:00:36,855
중간고사는 다음 주인 5월 9일 목요일 수업시간이 진행하도록 하겠습니다.
그 전까지 중간고사 범위 진도를 모두 나갈 예정입니다.
4
00:00:36,855 --> 00:00:41,350
Recurrent neural network 까지 차질없이
진행할 수 있도록 하겠습니다.
5
00:00:41,350 --> 00:00:49,121
그리고 우리 수업의 포스터세션이 6월 6일 12시부터 3시까지
진행될 예정입니다. 우리 수업의 마지막 주가 되겠군요
6
00:00:49,121 --> 00:00:53,828
이번에는 포스터세션이 조금 일찍 열립니다.
7
00:00:53,828 --> 00:01:00,132
포스터 세션까지 아직 시간이 남아있으니
기말 레포트에 최선을 다해주시기 바랍니다.
8
00:01:03,325 --> 00:01:05,812
지난 시간에 배운 내용을 복습해 보겠습니다.
9
00:01:05,812 --> 00:01:09,324
지난 시간에 다양한 딥러닝 프레임워크들을 배웠습니다.
10
00:01:09,324 --> 00:01:12,690
도PyTorch, TensorFlow, Caffe2 등이 있었죠
11
00:01:14,514 --> 00:01:18,762
이런 프레임워크를 이용하게 되면 NN, CNN같은 규모가 큰
computraional graphs를 아주 쉽게 구성할 수 있었습니다.
12
00:01:18,762 --> 00:01:25,784
또한 그래프에서 gradients을 계산하기에도
아주 수월했습니다.
13
00:01:25,784 --> 00:01:32,415
네트워크 중간의 가중치와 입력변수들의 그레디언트를
알아서 계산해 주기 때문에 Train에 사용만 하면 됩니다.
14
00:01:32,415 --> 00:01:35,665
그리고 이 모든 것을 GPU를 통해 아주 효율적으로
동작시킬 수 있습니다.
15
00:01:37,658 --> 00:01:44,978
그리고 프레임워크들은 대게 이런 식으로
모듈화된 레이어를 통해 동작합니다.
16
00:01:44,978 --> 00:01:49,928
여러분이 과제로 작성했던 backward/forward pass와
아주 유사한 모습입니다.
17
00:01:49,928 --> 00:01:58,404
모델 아키텍쳐를 구성하기 위해서는 단지 그 레이어들을
하나의 시퀀스로 정의하고 묶어주기만 하면 됩니다.
18
00:01:58,404 --> 00:02:04,937
이를 통해 아주 복잡한 아키텍쳐라고 해도
손쉽게 구성할 수 있습니다.
19
00:02:06,626 --> 00:02:14,520
오늘은 최신 CNN 아키텍쳐들에 대해서 배워보겠습니다.
20
00:02:14,520 --> 00:02:19,631
사람들이 가장 많이 사용하는 아키텍쳐들을
아주 심도깊게 살펴볼 것입니다.
21
00:02:19,631 --> 00:02:22,125
이들은 모두 ImageNet 첼린지에서 우승한 모델들이죠
22
00:02:22,125 --> 00:02:28,085
여기에는 제가 연대순으로 정렬했습니다. AlexNet, VGGNet,
GoogLeNet 그리고 ResNet이 있습니다.
23
00:02:28,085 --> 00:02:43,771
그리고 또한 엄청 잘 사용하지는 않지만 역사적인 관점에서
아주 흥미로운 모델들, 그리고 아주 최신의 모델들도 다룰 것입니다.
24
00:02:46,822 --> 00:02:50,839
아주 오래 전 강의에서 LeNet을 다룬 적이 있었습니다.
25
00:02:50,839 --> 00:02:55,603
LeNet은 산업에 아주 성공적으로 적용된 최초의 ConvNet입니다.
26
00:02:55,603 --> 00:03:05,778
LeNet은 이미지를 입력으로 받아서 stride = 1 인 5 x 5 필터를
거치고 몇 개의 Conv Layer와 pooling layer를 거칩니다.
27
00:03:05,778 --> 00:03:09,335
그리고 끝 단에 FC Layer가 붙습니다.
28
00:03:09,335 --> 00:03:14,320
엄청 간단한 모델이지만 숫자 인식에서
엄청난 성공을 거두었습니다.
29
00:03:17,030 --> 00:03:22,875
2012년에 AlexNet이 나왔습니다. 이 모델도 이전 강의에서
다들 본 적 있으실 것ㅇ비니다.
30
00:03:22,875 --> 00:03:31,179
AlexNet은 최초의 Large scale CNN 입니다. ImageNet
Classification Task을 아주 잘 수행했습니다.
31
00:03:31,179 --> 00:03:40,611
AlexNet은 2012년에 등장해서는 기존의 non-딥러닝 모델들을
능가하는 놀라운 성능을 보여줬습니다.
32
00:03:40,611 --> 00:03:48,012
AlexNet은 ConvNet 연구의 부흥을 일으킨 장본입니다.
33
00:03:48,012 --> 00:03:56,427
AlexNet은 기본적으로 conv - pool - normalization
구조가 두 번 반복됩니다.
34
00:03:58,421 --> 00:04:01,006
그리고 conv layer가 조금 더 붙고(CONV 3,4,5)
그 뒤에 pooling layer가 있습니다. (Max POOL3)
35
00:04:01,006 --> 00:04:03,422
그리고 마지막에는 FC-layer가 몇 개 붙습니다.
(FC6, FC7, FC8)
36
00:04:03,422 --> 00:04:09,766
생긴 것만 봐서는 기존의 LeNet과 상당히 유사합니다.
레이어만 더 많아졌습니다.
37
00:04:09,766 --> 00:04:18,387
AlexNet는 5개의 Conv Layer와
2개의 FC-Layer로 구성됩니다.
38
00:04:21,889 --> 00:04:25,930
그렇다면 이제 AlexNet 의 모델 크기를 한번 살펴봅시다.
39
00:04:25,930 --> 00:04:33,128
AlexNet의 ImageNet으로 학습시키는 경우
입력의 크기가 227 x 227 x 3 입니다.
40
00:04:33,128 --> 00:04:43,193
AlexNet의 첫 레이어를 살펴보면 11 x 11 필터가
stride = 4 로 96개가 존재합니다.
41
00:04:43,193 --> 00:04:49,323
그렇다면 잠시 멈춰서 생각해봅시다.
첫 레이어의 출력사이즈는 어떻게 될까요?
42
00:04:51,788 --> 00:04:53,371
힌트도 있습니다.
43
00:04:57,769 --> 00:05:11,441
입력과 Conv 필터의 사이즈를 알고 있습니다.
그리고 출력값의 차원도 여기 힌트로 있습니다.
44
00:05:11,441 --> 00:05:17,632
이 공식은 (전체 이미지 크기 - 필터 크기) / Stride + 1 이죠
45
00:05:17,632 --> 00:05:26,919
결국 출력차원은 55입니다.
답이 뭘까요?
46
00:05:26,919 --> 00:05:29,823
[학생이 대답]
47
00:05:29,823 --> 00:05:32,966
55 x 55 x 96 이라고 답했습니다. 맞습니다.
48
00:05:32,966 --> 00:05:38,113
출력값의 width, height는 각각 55 입니다.
49
00:05:38,113 --> 00:05:45,391
그리고 필터가 총 96개 이므로 depth가 96이 됩니다.
50
00:05:45,391 --> 00:05:49,486
자 그러면 이 레이어의 전체 파라미터 갯수는 몇 개일까요?
51
00:05:49,486 --> 00:05:52,819
명심해야 할 점은
11 x 11 필터가 총 96개 있다는 것입니다.
52
00:05:54,851 --> 00:05:57,753
[학생이 대답]
53
00:05:57,753 --> 00:06:00,753
96 x 11 x11 이라고 답했습니다.
거의 맞췄습니다.
54
00:06:01,945 --> 00:06:05,297
네 맞습니다. 3을 더 곱해줘야죠
55
00:06:05,297 --> 00:06:13,632
필터 하나가 11 x 11 x 3 을 통과합니다.
입력의 Depth가 3이죠
56
00:06:13,632 --> 00:06:18,983
답은 전체 필터의 크기 X 96 이 됩니다.
57
00:06:18,983 --> 00:06:23,150
첫 레이어에 35K의 파라미터가 있는 것입니다.
58
00:06:26,018 --> 00:06:30,233
자 그러면 두 번째 레이어를 한번 살펴봅시다.
두 번째 레이어는 Pooling Layer 입니다.
59
00:06:30,233 --> 00:06:34,004
여기에는 stride = 2 인 3 x 3 필터가 있습니다.
60
00:06:34,004 --> 00:06:38,171
이 레이어의 출력값의 크기는 어떻게 될까요?
61
00:06:40,701 --> 00:06:44,868
힌트도 드렸습니다. 지난 문제와 아주 유사합니다.
62
00:06:51,251 --> 00:06:56,267
27 x 27 x 96 이라고 답했습니다.
네 맞습니다.
63
00:06:57,716 --> 00:07:01,528
Pooling Layer에서는 힌트에 나와있는 공식이
적용될 것입니다.
64
00:07:01,528 --> 00:07:16,655
이 공식을 이용해서 width, height를 구할 수 있습니다.
다만 depth는 입력과 변하지 않습니다.
65
00:07:16,655 --> 00:07:21,527
입력의 Depth가 96 이었으니 출력의 Depth도 96 입니다.
66
00:07:22,825 --> 00:07:28,127
그렇다면 이 레이어의 파라미터는 몇 개일까요?
67
00:07:31,446 --> 00:07:34,354
[학생이 대답]
68
00:07:34,354 --> 00:07:36,905
없다고 대답했습니다. 네 맞습니다.
69
00:07:36,905 --> 00:07:40,801
Pooling layer에는 파라미터가 없죠.
훼이크였습니다.
70
00:07:42,739 --> 00:07:45,272
네 질문있나요?
71
00:07:45,272 --> 00:07:47,192
[학생이 질문]
72
00:07:47,192 --> 00:07:52,180
질문은 바로 왜 pooling layer에는 파라미터가
없는지 입니다.
73
00:07:52,180 --> 00:07:54,551
파라미터는 우리가 학습시키는 가중치입니다.
74
00:07:54,551 --> 00:07:56,511
Conv Layer에는 학습할 수 있는 가중치가 있습니다.
75
00:07:56,511 --> 00:08:02,236
반면 pooling의 경우에는 가중치가 없고 그저
특정 지역에서 큰 값을 뽑아내는 역할만 합니다.
76
00:08:02,236 --> 00:08:05,710
따라서 학습시킬 파라미터가 없는 것이죠
77
00:08:05,710 --> 00:08:14,250
다들 집에가서 모든 레이어의 파라미터 사이즈를 계산해
보면 아주 큰 도움이 될 것입니다.
78
00:08:16,473 --> 00:08:22,688
이는 AlexNet의 전체 구조입니다.
79
00:08:22,688 --> 00:08:31,920
Conv layer들의 파라미터 크기는 앞서 계산한 값과 유사할 것입니다.
80
00:08:31,920 --> 00:08:39,122
그리고 끝에 몇 개의 FC-Layer가 있었습니다.
4096개의 노드를 가진 레이어입니다.
81
00:08:39,123 --> 00:08:41,540
그리고 FC8 는 Softmax를 통과합니다.
82
00:08:42,689 --> 00:08:46,356
1000 ImageNet 클래스로 이동합니다.
83
00:08:48,039 --> 00:08:56,352
AlexNet을 조금 더 자세히 살펴보자면 우선 ReLU 를 사용했습니다.
ReLU는 딥러닝 모델에서 아주 보편화된 방법입니다.
84
00:08:56,352 --> 00:09:07,391
local response normalization layer는 채널간의
normalization을 위한 것인데 요즘은 잘 사용하지 않습니다.
85
00:09:07,391 --> 00:09:11,937
큰 효과가 없는 것으로 알려졌기 때문입니다.
86
00:09:11,937 --> 00:09:21,769
data augumentation을 엄청 했습니다. 논문이 더 자세하지만
flipping, jittering, color norm 등을 적용하였습니다.
87
00:09:21,769 --> 00:09:28,727
data augumentation은 여러분이 프로젝트를
진행할 때 아주 유용한 기법입니다.
88
00:09:28,727 --> 00:09:32,419
AlexNet은 Dropout을 사용했습니다.
학습 시 Batch size는 128 입니다.
89
00:09:32,419 --> 00:09:37,183
그리고 우리도 지난 강의에서 배웠던
SGD momentum을 사용했습니다.
90
00:09:37,183 --> 00:09:42,295
그리고 초기 Learning rate 는 1e-2 입니다.
91
00:09:42,295 --> 00:09:50,145
그리고 val accuracy가 올라가지 않는 지점에서는 학습이 종료되는
시점까지 Learning rate를 1e-10까지 줄입니다.
92
00:09:50,145 --> 00:09:59,012
그리고 wight decay를 사용했고, 마지막에는
모델 앙상블로 성능을 향상시켰습니다.
93
00:09:59,012 --> 00:10:03,162
그리고 여러개의 모델을 앙상블시켜서
성능을 개선했습니다.
94
00:10:04,405 --> 00:10:08,781
그리고 한가지 더 말씀드릴 점은 여기 AlexNet
다이어그램을 보시면
95
00:10:08,781 --> 00:10:15,235
대체로 다른 Conv Net의 다이어그램과 유사하긴 하지만
한 가지 차이점이 있습니다.
96
00:10:15,235 --> 00:10:21,937
그것은 바로 모델이 두개로 나눠져서 서로 교차하는 것입니다.
97
00:10:23,177 --> 00:10:32,905
역사적으로 들여다보면 AlexNet을 학습할 당시에 GTX850
으로 학습시켰습니다. 이 GPU는 메모리가 3GB 뿐이죠
98
00:10:34,106 --> 00:10:37,255
전체 레이어를 GPU에 다 넣을 수 없었습니다.
99
00:10:37,255 --> 00:10:41,773
그래서 네트워크를 GPU에 분산시켜서 넣었습니다.
100
00:10:41,773 --> 00:10:46,455
각 GPU가 모델의 뉴런과 Feature Map을 반반씩 나눠가집니다.
101
00:10:46,455 --> 00:10:51,730
첫 번째 레이어를 살펴보면 출력이 55 x 55 x 96입니다.
102
00:10:54,389 --> 00:11:04,155
다이어그램을 유심히 살펴보면 각 GPU에서의
Depth가 48이라는 것을 알 수 있습니다.
103
00:11:05,049 --> 00:11:08,593
Feature Map을 절반씩 가지고 있는 것이죠
104
00:11:10,288 --> 00:11:17,367
AlexNet의 Conv 1,2,4,5 에서
어떤 일이 발생하는지 살펴봅시다.
105
00:11:17,367 --> 00:11:29,683
여기에서는 같은 GPU 내에 있는 Feature Map만 사용합니다.
Conv 1,2,4,5는 전체 96 feature map을 볼 수 없습니다.
106
00:11:29,683 --> 00:11:33,850
Conv 1,2,4,5는 48개의 Feature Map만 사용하는 셈입니다.
107
00:11:34,767 --> 00:11:47,696
이제 conv 3와 FC 6, 7, 8 를 한번 살펴봅시다. 이 레이어들은
이전 계층의 "전체 Feature map"과 연결되어 있습니다.
108
00:11:47,696 --> 00:11:54,191
이 레이어들에서는 GPU간의 통신을 하기 때문에 이전 입력
레이어의 전체 Depth를 전부 가져올 수 있는 것입니다.
109
00:11:54,191 --> 00:11:55,627
질문있나요?
110
00:11:55,627 --> 00:12:01,442
[학생이 질문]
111
00:12:05,583 --> 00:12:10,033
질문은 왜 여기에 예시가 full "simplified"
AlexNet architecture 인지 입니다.
112
00:12:10,033 --> 00:12:19,036
Simplified 라고 하는 이유는 여기에 AlexNet의
세부적인 것들을 전부 표시하지 않았기 때문입니다.
113
00:12:19,036 --> 00:12:25,268
가령 normalization layer 같은 경우에
자세히 기입해 놓지 않았습니다.
114
00:12:30,637 --> 00:12:37,849
그리고 AlexNet 논문의 아키텍쳐와 관련한 조그만
이슈가 하나 있습니다.
115
00:12:38,858 --> 00:12:52,721
논문의 그림에서는 첫 레이어가 224 x 224 라고 되어 있습니다.
하지만 실제 입력은 227 x 227 입니다.
116
00:12:54,982 --> 00:13:04,261
AlexNet은 Image Classification Benchmark의
2012년도에 우승한 모델입니다.
117
00:13:05,246 --> 00:13:14,193
AlexNet은 최초의 CNN기반 우승 모델이고 수년 전까지 대부분의
CNN 아키텍쳐의 베이스모델로 사용되어 왔습니다.
118
00:13:15,720 --> 00:13:17,980
물론 아직까지도 꽤 사용합니다.
119
00:13:17,980 --> 00:13:24,071
AlexNet은 다양한 Task의 transfer learning에 많이
사용되었습니다. 아주 오랜 시간 많은 사람들이 사용했고 -
120
00:13:24,071 --> 00:13:33,202
정말 유명한 모델이었습니다. 지금은 더 최신의 아키텍쳐가 많습니다.
일반적으로 AlexNet보다 성능이 더 뛰어나죠.
121
00:13:33,202 --> 00:13:39,282
이제는 더 최신의 모델들에 대해 살펴보겠습니다. 여러분이
실제도 더 자주 사용하게될 모델들입니다.
122
00:13:40,853 --> 00:13:47,813
그리고 2013년의 ImageNet Challange의 승자는
ZFNet 이라는 모델입니다.
123
00:13:47,813 --> 00:13:48,718
질문있나요?
124
00:13:48,718 --> 00:13:52,729
[학생이 질문]
125
00:13:52,729 --> 00:13:56,612
질문은 AlexNet이 기존의 모델들보다 뛰어날 수 있었던
이유가 무엇인지 입니다.
126
00:13:56,612 --> 00:14:04,786
이는 딥러닝와 Conv Net 때문입니다.
이들은 기존의 방법들과 완전히 다른 접근방법입니다.
127
00:14:04,786 --> 00:14:09,004
AlexNet이 최초로 딥러닝과 Conv Net을 적용하였습니다.
128
00:14:12,445 --> 00:14:18,298
2013년에는 ZFNet이 우승트로피를 획득했습니다.
ZF는 저자들의 이름을 딴 명칭입니다.
129
00:14:18,298 --> 00:14:23,749
ZFNet은 대부분 AlexNet의 하이퍼파라미터를 개선한 모델입니다.
130
00:14:23,749 --> 00:14:35,735
AlexNet과 같은 레이어 수이고 기존적인 구조도 같습니다.
다만 stride size, 필터 수 같은 하이퍼파라미터를 조절해서-
131
00:14:35,735 --> 00:14:41,369
AlexNet의 Error rate를 좀 더 개선시켰습니다.
AlexNet의 아이디어와는 기본적으로 같습니다.
132
00:14:41,369 --> 00:14:49,843
2014년에는 많은 변화가 있었습니다. 아키텍쳐도 많이 변했고
성능을 훨씬 향상되었죠
133
00:14:49,843 --> 00:14:58,178
가장 큰 차이점이라면 우선 네트워크가 훨씬 더 깊어졌다는 것입니다.
134
00:14:58,178 --> 00:15:12,321
2012/2013년에는 8개의 레이어였습니다. 하지만 2014년에는
19레이어와 22 레이어로 늘어났습니다. 훨씬 더 깊어졌죠
135
00:15:12,321 --> 00:15:16,502
2014년도의 우승자는 Google의 GoogLenet이었습니다.
136
00:15:16,502 --> 00:15:20,176
그리고 Oxford의 VGGNet이 2등을 차지했죠
137
00:15:20,176 --> 00:15:27,421
VGGNet은 Localization Challenge 등 일부 다른
트랙에서는 1위를 차지했습니다.
138
00:15:27,421 --> 00:15:31,958
이 둘 모두 아주 강력한 네트워크입니다.
139
00:15:31,958 --> 00:15:34,663
우선 VGG을 한번 살펴봅시다.
140
00:15:34,663 --> 00:15:40,818
VGGNet의 특징은 우선 훨씬 더 깊어졌고
그리고 더 작은 필터를 사용한다는 것입니다.
141
00:15:40,818 --> 00:15:50,374
AlexNet에서는 8개의 레이어였지만 VGGNet은
16에서 19개의 레이어를 가집니다.
142
00:15:52,290 --> 00:16:03,916
그리고 VGGNet은 아주 작은 필터만 사용합니다. 항상 3 x 3 필터만
사용합니다. 이웃픽셀을 포함할 수 있는 가장 작은 필터입니다.
143
00:16:03,916 --> 00:16:11,485
이렇게 작은 필터를 유지해 주고 주기적으로 Pooling을
수행하면서 전체 네트워크를 구성하게 됩니다.
144
00:16:11,485 --> 00:16:19,948
VGGNet은 아주 심플하면서도 고급진 아키텍쳐이고
ImageNet에서 7.3%의 Top 5 Error를 기록했습니다.
145
00:16:22,651 --> 00:16:27,442
그렇다면 VGGNet은 왜 더 작은 필터를 사용했을까요?
146
00:16:27,442 --> 00:16:33,371
우선 필터의 크기가 작으면 파라미터의 수가 더 적습니다.
따라서 큰 필터에 비해 레이어를 조금 더 많이 쌓을 수 있겠죠
147
00:16:33,371 --> 00:16:39,344
다시 말해 작은 필터를 사용하면 Depth를 더 키울 수 있는 것입니다.
148
00:16:39,344 --> 00:16:47,202
3 x 3 필터를 여러 개 쌓은 것은 결국 7 x 7 필터를 사용하는 것과
실질적으로 동일한 Receptive Filter를 가지는 것입니다.
149
00:16:47,202 --> 00:16:55,466
그렇다면 질문입니다. stride = 1 인 3 x 3필터를 세 개의
Receptive Filed는 어떻게 될까요?
150
00:16:55,466 --> 00:17:01,189
Stride가 1인 필터 세 개를 쌓게 되면
실질적인 Receptive Field가 어떻게 될까요?
151
00:17:01,189 --> 00:17:09,754
Receptive Field은 filter가 한번에 볼 수 있는 입력의
"Sparical area" 입니다.
152
00:17:12,313 --> 00:17:15,987
누군가가 15 픽셀이라고 했습니다.
왜 15 필셀인가요?
153
00:17:15,987 --> 00:17:20,609
[학생이 대답]
154
00:17:20,609 --> 00:17:27,369
네 맞습니다 필터들이 서로 겹치는 것입니다.
155
00:17:27,369 --> 00:17:35,668
실제로 어떤 일이 발생하는지 한번 살펴봅시다. 우선 첫 번째
레이어의 Receptive Field는 3 x 3 입니다.
156
00:17:35,668 --> 00:17:43,193
두 번째 레이어의 경우는 각 뉴런이 첫 번째 레이어 출력의
3 x 3 만큼을 보게 될 것입니다.
157
00:17:43,193 --> 00:17:51,676
그리고 3 x 3 중에 각 사이드는 한 픽셀씩 더 볼 수 있게 됩니다.
158
00:17:51,676 --> 00:17:56,423
따라서 두번째 레이어의 경우는 실제로
5 x 5의 receptive filed를 가지게 되는 것입니다.
159
00:17:56,423 --> 00:18:04,040
세 번째 레이어의 경우 두 번째 레이어의 3 x 3 을 보게됩니다.
160
00:18:04,040 --> 00:18:06,907
그리고 이 과정을 피라미드처럼 그려보면
결국 입력 레이어의 7 x 7을 보게되는 것이죠
161
00:18:06,907 --> 00:18:16,026
따라서 실질적인 Receptive Field는 여기에서 7 x 7 이 됩니다.
하나의 7 x 7 필터를 사용하는 것과 동일합니다.
162
00:18:16,026 --> 00:18:21,546
따라서 이는 7 x 7 필터와 실직적으로 동일한 receptive
filed를 가지면서도 더 깊은 레이어를 쌓을 수 있게 됩니다.
163
00:18:21,546 --> 00:18:26,201
더 깊게 쌓으므로써 Non-Linearity를 더 추가할 수 있고
파라미터 수도 더 적어지게 됩니다.
164
00:18:26,201 --> 00:18:36,536
전체 파라미터의 갯수를 살펴보면 3 x 3 필터에는
9개의 파라미터가 있습니다.
165
00:18:38,165 --> 00:18:44,648
3 x 3 가 되죠 그리고 Depth인 C가 있으니
3 x 3 x C 가 됩니다.
166
00:18:44,648 --> 00:18:51,034
그리고 출력 Feature Map의 갯수를 곱해줘야 하는데
이 경우에는 입력 Depth와 같습니다. C이죠
167
00:18:51,034 --> 00:19:00,165
따라서 각 레이터 당 3 x 3 x C x C 가 됩니다. 그리고 레이어가
세개 이므로 3을 더 곱해줍니다.
168
00:19:00,165 --> 00:19:07,409
7 x 7 필터인 경우에는 7 x 7 x C x C 입니다.
169
00:19:07,409 --> 00:19:11,032
따라서 더 적은 파라미터를 가지게 됩니다.
170
00:19:15,570 --> 00:19:24,161
이제 전체 네트워크를 한번 살펴보도록 하겠습니다. 여기 숫자가
너무 많죠 다들 집으로 돌아가서 유심히 살펴보시기 바랍니다.
171
00:19:24,161 --> 00:19:30,716
AlexNet에서 우리가 계산해 봤던 것 처럼 파라미터의
크기와 수를 계산해 보실 수 있을 것입니다.
172
00:19:30,716 --> 00:19:32,517
연습으로 해보시면 아주 좋습니다.
173
00:19:32,517 --> 00:19:45,834
비슷한 패턴이 반복됩니다. Conv Layer와 Pooling Layer가
반복적으로 진행되는 것이죠
174
00:19:45,834 --> 00:19:52,431
VGG16에서 모든 Layer의 수를 세어보면 16개 입니다.
175
00:19:52,431 --> 00:20:00,478
VGG19의 경우 유사한 아키텍쳐이지만 Conv Layer가
조금 더 추가되었습니다.
176
00:20:03,021 --> 00:20:05,605
네트워크이 전체 메모리 사용량을 살펴봅시다.
177
00:20:05,605 --> 00:20:17,196
Forward pass 시 필요한 전체 메모리를 계산한 것입니다.
178
00:20:17,196 --> 00:20:23,125
그리고 각 노드가 4 bytes 의 메모리를 차지하므로
전체 약 100 MB의 메모리가 필요합니다.
179
00:20:23,125 --> 00:20:28,727
100MB가 전체 메모리 사용량이죠. 하지만 이 값은
Forward Pass 만 계산한 것입니다.
180
00:20:28,727 --> 00:20:35,470
Backward Pass를 고려한다면 더 많은 메모리가 필요할 것입니다.
VGG16은 메모리사용량이 많은 편입니다.
181
00:20:35,470 --> 00:20:44,410
전체 메모리가 5GB라면 이미지 하나당 100MB이므로
50장 밖에 처리할 수 없습니다.
182
00:20:47,300 --> 00:20:56,131
그리고 전체 파라미터의 갯수는 138M 개 입니다.
AlexNet의 경우에는 60M 개었죠
183
00:20:56,131 --> 00:20:57,481
질문있나요?
184
00:20:57,481 --> 00:21:00,898
[학생이 질문]
185
00:21:06,204 --> 00:21:09,920
질문은 "네트워크가 더 깊다"는게 "필터의 갯수가 더 많은 것"을
의미하는 것인지 "레이어의 갯수가 더 많은 것"을 의미하는 것인지 입니다.
186
00:21:09,920 --> 00:21:14,087
이 경우에는 레이어의 갯수를 의미합니다.
187
00:21:15,605 --> 00:21:25,216
Depth 라는 용어는 두 가지도 사용할 수 있습니다. 첫 째로는 채널의
Depth입니다. Width, Height, Depth 할때 Depth이죠
188
00:21:26,942 --> 00:21:34,298
반면 일반적으로 "네트워크의 깊이(Depth)"라고 할 때는
네트워크의 전체 레이어의 갯수 를 의미합니다.
189
00:21:34,298 --> 00:21:43,368
"학습 가능한 가중치를 가진 레이어의 갯수" 를 의미합니다.
가령 Conv Layer와 FC Layer 등 말입니다.
190
00:21:43,368 --> 00:21:46,868
[학생이 질문]
191
00:22:00,810 --> 00:22:06,174
질문은 하나의 Conv Layer 내에 여러개의 필터가 존재하는
이유가 무엇인지 입니다.
192
00:22:06,174 --> 00:22:13,043
지난 Conv Net 강의에서 다룬 적이 있습니다. 집에 돌아가서
한번 참고해 보시는 것이 좋을 것 같습니다. 어쩄든 -
193
00:22:13,043 --> 00:22:27,616
3 x 3 Conv 필터가 있다고 해봅시다. 필터는 한번에
3 x 3 x Depth를 보고 하나의 Feature Map을 만들어냅니다.
194
00:22:27,616 --> 00:22:31,954
그리고 입력 전체를 돌면서 하나의 Feature Map을
완성시킵니다.
195
00:22:31,954 --> 00:22:39,646
우리는 여러개의 필터를 사용할 수 있습니다. 가령 96개를 사용할 수
있겠죠. 그리고 각 필터는 하나의 Feature Map을 만듭니다.
196
00:22:39,646 --> 00:22:48,368
그리고 각 필터가 존재하는 이유는 서로 다른 패턴을
인식하기 위해서 라고 할 수 있습니다.
197
00:22:48,368 --> 00:22:56,181
각 필터는 각각의 Feature Map을 만들게 되는 것입니다.
198
00:22:58,761 --> 00:23:00,226
질문있나요?
199
00:23:00,226 --> 00:23:03,643
[학생이 질문]
200
00:23:07,465 --> 00:23:16,733
질문은 "네트워크가 깊어질수록 레이어의 필터 갯수를 늘려야
하는지" 입니다.(Channel Depth를 늘려야 하는지)
201
00:23:17,676 --> 00:23:21,766
여러분이 디자인하기 나름이고 반드시 그럴 필요는 없습니다.
202
00:23:21,766 --> 00:23:24,341
하지만 실제로 사람들이 Depth를 많이 늘리는 경우가 많습니다.
203
00:23:24,341 --> 00:23:30,598
Depth를 늘리는 이유 중 하나는 계산량을 일정하게 유지시키기
위해서 입니다(constant level of compute).
204
00:23:30,598 --> 00:23:37,991
보통 네트워크가 깊어질수록 각 레이어의 입력을
Down sampling하게 됩니다.
205
00:23:39,606 --> 00:23:45,759
Spatial area가 작아질수록 필터의 depth를
조금씩 늘려주게 됩니다.
206
00:23:45,759 --> 00:23:53,367
Width Height가 작아지기 때문에 Depth를 늘려도
부담이 없습니다.
207
00:23:53,367 --> 00:23:54,716
질문있나요?
208
00:23:54,716 --> 00:23:58,133
[학생이 질문]
209
00:23:59,872 --> 00:24:04,653
질문은 네트워크에 SoftMax Loss 대신
SVM Loss를 사용해도 되는지 입니다.
210
00:24:04,653 --> 00:24:09,761
지난 강의에서 다룬 내용입니다만
둘 다 사용할 수 있습니다.
211
00:24:09,761 --> 00:24:17,242
하지만 보통 SoftMax Loss를 일반적으로 사용하는 편입니다.
212
00:24:18,509 --> 00:24:20,023
네 질문있나요?
213
00:24:20,023 --> 00:24:23,523
[학생이 질문]
214
00:24:37,902 --> 00:24:45,398
질문은 "앞서 계산한 메모리 중에 굳이 가지고 있지 않고
버려도 되는 부분이 있는지" 입니다.
215
00:24:45,398 --> 00:24:49,221
예 맞습니다.
일부는 굳이 가지고있지 않아도 됩니다.
216
00:24:49,221 --> 00:25:02,571
하지만 Backword pass시 chain rule을 계산할 때
대부분은 이용됩니다. 따라서 대부분은 반드시 가지고있어야겠죠