-
Notifications
You must be signed in to change notification settings - Fork 213
Expand file tree
/
Copy pathLecture 6 Training Neural Networks I.ko.srt
More file actions
3150 lines (2474 loc) · 86.2 KB
/
Lecture 6 Training Neural Networks I.ko.srt
File metadata and controls
3150 lines (2474 loc) · 86.2 KB
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:10,729 --> 00:00:12,896
시작하겠습니다.
2
00:00:16,381 --> 00:00:21,529
이번 시간에는 nerural network를 학습시키는 방법을
심도깊게 살펴보겠습니다.
3
00:00:23,166 --> 00:00:28,785
우선 공지사항먼저 전달드리자면
첫 번째 과제는 오늘까지입니다.
4
00:00:28,785 --> 00:00:36,521
금일 11:59 p.m 까지 Canvas에 제출해주시기 바라며,
더불어 과제 2가 새롭게 나갈 것입니다.
5
00:00:36,521 --> 00:00:40,082
그리고 여러분의 프로젝트 제안서는
25일까지 제출해 주시기 바랍니다.
6
00:00:40,082 --> 00:00:46,591
아직 준비가 안되신 분들이면 서둘러 해주시기 바랍니다.
7
00:00:46,591 --> 00:00:54,804
어느정도 구상한 분들이 계십니까?
몇 분정도 계시는군요
8
00:00:54,804 --> 00:01:03,937
어떻게 해야할지 모르겠다 싶으면
TA 사무실로 방문해 주시면 도와드리겠습니다.
9
00:01:05,657 --> 00:01:18,121
Piazza에 다른 연계 프로젝트도 있으니 확인해 주시기 바랍니다.
10
00:01:19,604 --> 00:01:28,004
그리고 Justin이 만든 "Linear Layer에서의 Backporp",
"vector/tensor 미분" 관련자료가 있으니 참고해주세요.
11
00:01:28,004 --> 00:01:33,964
이 자료를 보시면 vector/matrix에서 backporp이 어떻게
동작하는지 이해하실 수 있을 것입니다.
12
00:01:33,964 --> 00:01:40,484
Syllabus에 Lecture 4에 링크되어 있으니 보시면 됩니다.
13
00:01:45,110 --> 00:01:57,124
지난 시간에 함수를 computational graph로 표현하는
방법을 배웠습니다. 어떤 함수든 이렇게 표현할 수 있습니다.
14
00:01:57,124 --> 00:02:03,751
Neural network에 대해서 자세히 배웠습니다.
여기 보이는 것 처럼 Linear Layer들이 있었죠
15
00:02:03,751 --> 00:02:08,360
비 선형 연산자들을 끼워넣으면서 여러 층으로 쌓았습니다.
16
00:02:09,456 --> 00:02:13,360
지난 시간에 CNN도 배웠습니다.
17
00:02:13,360 --> 00:02:24,936
CNN은 "Spatial structure" 를 사용하기 위해
Conv Layer를 사용하는 NN의 특수한 형태이입니다.
18
00:02:24,936 --> 00:02:38,056
Conv 필터가 입력 이미지를 슬라이딩해서 계산한 값들이 모여
출력 Activation map을 만들게 됩니다.
19
00:02:38,056 --> 00:02:45,456
그리고 Conv layer는 대게 다수의 필터를 사용했습니다.
각 필터는 서로 다른 Activation map을 생성합니다.
20
00:02:45,456 --> 00:02:50,655
여기 그림은 보면 어떤 입력이 있고 Depth가 있습니다.
이제 Activation map 을 만들어야 하는데
21
00:02:50,655 --> 00:02:58,771
Activation map는 필터의 갯수만큼 존재하며 각 map은
입력의 공간적인 정보를 보존하고 있습니다.
22
00:02:59,695 --> 00:03:05,895
자 이제 우리가 하고싶은 것은 가중치, 즉 파라미터를
업데이트 하고 싶은 것입니다.
23
00:03:05,895 --> 00:03:12,507
지난 시간에 배웠듯이 Optimization을 통해서
네트워크의 파라미터를 학습할 수 있었습니다.
24
00:03:12,507 --> 00:03:17,254
그리고 Loss 라는 산에서 Loss가 줄어드는 방향으로
이동하고 싶은 것입니다.
25
00:03:17,254 --> 00:03:23,053
그리고 이는 gradient의 반대 방향으로 이동하는 것과 같습니다.
26
00:03:23,053 --> 00:03:27,614
이를 Mini-batch Stochastic Gradient Descent
이라고 했습니다.
27
00:03:27,614 --> 00:03:38,585
Mini-batch SGD는 우선 데이터의 일부만 가지고
Forword pass를 수행한 뒤에 Loss를 계산합니다.
28
00:03:38,585 --> 00:03:41,960
그리고 gradient를 계산하기 위해서
backprop를 수행합니다.
29
00:03:41,960 --> 00:03:47,986
그리고 그 gradient를 이용해서 파마미터를 업데이트합니다.
30
00:03:49,980 --> 00:03:58,321
향 후 몇번의 강의는 NN의 학습에 대해 다룰 것입니다.
31
00:03:58,321 --> 00:04:02,441
우선 NN 학습을 처음 시작할때 필요한 기본 설정에 대해 알아볼 것입니다.
32
00:04:02,441 --> 00:04:11,015
활성함수 선택, 데이터 전처리, 가중치 초기화
Regularization, gradient checking 등이 이에 속하죠
33
00:04:11,015 --> 00:04:16,118
또한 Training dynamics에 대해서도 다룰 것입니다.
학습이 잘 되고 있는지 확인하는 법에 대해 배울 것입니다.
34
00:04:16,118 --> 00:04:21,294
어떤 방식으로 파라미터를 업데이트할 것인지에 대해서도 배울 것이고
35
00:04:21,294 --> 00:04:26,241
가장 적절한 하이퍼파라미터를 찾기 위해
하이퍼파라미터를 Optimization 하는 방법도 배울 것입니다.
36
00:04:26,241 --> 00:04:28,281
그리고 평가에 대해서도 이야기 할 것입니다.
37
00:04:28,281 --> 00:04:29,948
그리고 Model ensemble에 대해서도 배웁니다.
38
00:04:33,000 --> 00:04:41,015
오늘은 Part 1 으로 활성함수, 데이터 전처리,
가중치 초기화, Batch Normalization
39
00:04:41,015 --> 00:04:45,412
학습 과정 다루기, 하이퍼 파라미터 Optimization 을
배워 보도록 하겠습니다.
40
00:04:47,348 --> 00:04:50,348
자 Activation Function 부터 시작해봅시다.
41
00:04:51,708 --> 00:04:55,095
자 먼저 지난시간에 봤던 Layer를 살펴보면
42
00:04:55,095 --> 00:05:01,481
데이터 입력이 들어오면 가중치와 곱합니다.
FC 나 CNN이 될 수 있겠죠
43
00:05:01,481 --> 00:05:06,388
그 다음 활성함수, 즉 비선형 연산을 거치게 됩니다.
44
00:05:06,388 --> 00:05:08,027
활성함수의 예시를 보겠습니다.
45
00:05:08,027 --> 00:05:13,295
지난 시간에 Sigmoid를 본적이 있죠
ReLU도 봤습니다.
46
00:05:13,295 --> 00:05:20,479
이번 시간에는 좀 더 다양한 종류의 활성함수와
그들간의 Trade-off에 대해 다뤄보도록 하겠습니다.
47
00:05:22,228 --> 00:05:27,241
자 우선 Sigmoid부터 보겠습니다.
우리한테 제일 만만한 놈이죠
48
00:05:27,241 --> 00:05:32,572
Sigmoid는 이렇게 생겼습니다.
1/(1+e^-x) 이죠
49
00:05:32,572 --> 00:05:45,201
얘가 하는 일은 각 입력을 받아서 그 입력을 [0, 1] 사이의
값이 되도록 해줍니다.
50
00:05:45,201 --> 00:05:50,427
입력의 값이 크면 Sigmoid의 출력은 1에 가까울 것이고
51
00:05:50,427 --> 00:05:55,321
값이 작으면 0에 가까울 것입니다.
52
00:05:55,321 --> 00:06:02,481
0 근처 구간(rigime)을 보면 선형스럽습니다 (/ 모양)
그 쪽은 선형함수 같아 보입니다.
53
00:06:02,481 --> 00:06:05,374
Sigmoid는 역사적으로 아주 유명했습니다.
54
00:06:05,374 --> 00:06:11,530
왜냐하면 Sigmoid가 일종의, 뉴런의 firing rate를
saturation 시키는 것으로 해석할 수 있기 때문입니다.
55
00:06:11,530 --> 00:06:15,455
어떤 값이 0에서 1 사이의 값을 가지면
이를 fireing rate라고 생각할 수 있을 것입니다.
56
00:06:15,455 --> 00:06:23,588
나중에 ReLU 같은 것을 배울 것인데, 실제로 ReLU가
생물학적 타당성이 더 크다는게 밝혀졌지만
57
00:06:23,588 --> 00:06:27,402
Sigmoid 또한 이런 식으로 해석할 수 있다는 점을
알고 넘어가면 될 것 같습니다.
58
00:06:30,015 --> 00:06:36,492
요 녀석을 한번 자세히 살펴보면
문제점이 몇 가지 있습니다.
59
00:06:36,492 --> 00:06:44,065
우선 Saturation되는게 gradient를 없앱니다.
이게 무슨 뜻일까요?
60
00:06:44,988 --> 00:06:48,801
이 Sigmoid gate를 Computraional graph에서
한번 살펴보겠습니다.
61
00:06:48,801 --> 00:06:54,566
여기 데이터 X가 있고 출력이 있습니다.
62
00:06:54,566 --> 00:06:59,236
Backprop에서 Gradient는 어떻게될까요?
63
00:06:59,236 --> 00:07:08,441
우선 dL/dSigma 가 있습니다. dL/dSigma가 밑으로
내려가죠 그리고 dX/dSigma를 곱하게 될 것입니다.
64
00:07:08,441 --> 00:07:11,081
이 값이 local sigmoid function의
gradient가 될 것입니다.
65
00:07:11,081 --> 00:07:16,495
그리고 이런 값들이 계속 연쇄적으로
Backporp될 것입니다.
66
00:07:16,495 --> 00:07:24,708
그렇다면 질문입니다. X가 -10이면 어떻게 될까요?
gradient는 어떻게 생기게 될까요?
67
00:07:24,708 --> 00:07:28,868
네 맞습니다. 0이 되겠죠.
gradient는 0이 됩니다.
68
00:07:28,868 --> 00:07:37,348
Sigmoid에서 음의 큰 값이면 sigmoid가
flat하게 되고 gradient가 0이 되겠죠
69
00:07:37,348 --> 00:07:40,001
그리고 이 값이 밑으로 내려갈 것입니다.
70
00:07:40,001 --> 00:07:46,501
거의 0에 가까운 값이 backprob 될 것입니다.
71
00:07:46,501 --> 00:07:55,381
이 부분에서 gradient가 죽어버리게 되고
밑으로 0이 계속 전달되게 됩니다.
72
00:07:58,869 --> 00:08:10,015
그렇다면 X가 0이면 어떻까요?
맞습니다. 이 구간에서는 잘 동작할 것입니다.
73
00:08:10,015 --> 00:08:15,135
아주 그럴싸한 gradient를 얻게 될 것이고
backprop 이 잘 될 것입니다.
74
00:08:15,135 --> 00:08:20,055
그러면 X가 10이면 어떻까요?
75
00:08:20,055 --> 00:08:31,108
X가 값이 큰 양수 일 경우에도 sigmoid가 flat하기
때문에 gradient들 다 죽이게 됩니다.
76
00:08:31,108 --> 00:08:35,275
그러면 gradient가 잘 흐르지 않겠죠
77
00:08:37,055 --> 00:08:42,454
두 번째 문제는 바로
sigmoid 의 출력이 zero centered 하지 않다는 것입니다.
78
00:08:42,454 --> 00:08:46,415
이게 왜 문제인지 한번 알아보도록 하겠습니다.
79
00:08:46,415 --> 00:08:51,892
자 그럼 뉴런의 입력이 항상 양수일 때
어떤 일이 벌어지는지 한번 살펴보겠습니다.
80
00:08:51,892 --> 00:08:54,948
이 경우에 모든 X가 양수일 때 입니다.
81
00:08:54,948 --> 00:09:04,348
이 x는 어떤 가중치랑 곱해지고 활성함수를 통과하겠죠
82
00:09:04,348 --> 00:09:08,015
그럼 W에 대한 gradient를 한번 생각해볼까요?
83
00:09:12,375 --> 00:09:18,135
이 Layer에서의 local gradient가 어떻게 될지
한번 생각해 보세요
84
00:09:18,135 --> 00:09:24,214
우선 dL/d(활성함수) 를 계산하겠죠 그렇게 Loss가 내려가고
85
00:09:24,214 --> 00:09:29,834
그리고 Local gradient가 있을텐데,
기본적으로 그냥 X입니다.
86
00:09:29,834 --> 00:09:34,001
그렇다면 모든 X가 양수라는 것은 무슨뜻일까요?
87
00:09:36,253 --> 00:09:44,401
누군가가 gradient가 전부 "양수" 가 된다고 하셨는데요.
정확히는 "전부 양수" 또는 "전부 음수" 입니다.
88
00:09:44,401 --> 00:09:53,588
위에서 dL/df(활성함수) 가 넘어오겠죠
이 값이 음수 또는 양수가 될 것입니다.
89
00:09:53,588 --> 00:09:55,815
어떤 임의의 gradient가 내려온다고 생각해 봅시다.
90
00:09:55,815 --> 00:10:06,619
우선 local gradient는 이 값이랑 곱해질 것이고
dF(활성함수)/dW는, 그냥 X가 될 것입니다.
91
00:10:07,880 --> 00:10:20,800
그렇게 되면 gradient의 부호는 그저
위에서 내려온 gradient의 부호과 같아 질 것입니다.
92
00:10:20,800 --> 00:10:28,520
이것이 의미하는 바는 W가 모두 같은 방향으로만 움직일 것임을
의미하게 됩니다.
93
00:10:28,520 --> 00:10:42,467
파라미터를 업데이트 할 때 다 같이 증가하거나
다 같이 감소하거나 할 수 밖에 없습니다.
94
00:10:42,467 --> 00:10:48,867
여기서의 문제는 이런 gradient 업데이트는
아주 비효율적이라는 것입니다.
95
00:10:48,867 --> 00:10:59,507
여기 W가 이차원인 예제가 있습니다.
W에 대한 두개의 축으로 이루어져 있습니다.
96
00:10:59,507 --> 00:11:04,796
전부 양수 또는 음수로 업데이트된다는 것을 해석해보면
97
00:11:04,796 --> 00:11:12,400
이렇게 되면 gradient가 이동할 수 있는 방향은 4분면 중
이 두 영역뿐이 안 될 것입니다.
98
00:11:12,400 --> 00:11:17,213
이 두 방향으로 밖에 gradient가 업데이트되지 않습니다.
99
00:11:17,213 --> 00:11:25,399
그래서 이론적으로 가장 최적의 W 업데이트가
저 파란색 화살표이고
100
00:11:25,399 --> 00:11:30,773
우리가 어떤 초기 시작점부터 내려간다고 했을 때
시작점은 빨간 화살표의 맨 처음 부분입니다.
101
00:11:30,773 --> 00:11:38,946
하지만 gradient는 파란색 방향으로 내려갈 수 없습니다.
그 방향으로는 움직일 수 없기 때문이죠
102
00:11:38,946 --> 00:11:43,479
그렇기 때문에 우리는 여러번 gradient 업데이트를
수행해 줘야 합니다.
103
00:11:43,479 --> 00:11:51,953
가령 이렇게 빨간 화살표 방향와 같이, gradient가 이동 가능한
방향으로만 이동을 할 수 있게 됩니다.
104
00:11:53,039 --> 00:11:58,479
이것이 바로 우리가 일반적으로
zero-mean data을 원하는 이유입니다.
105
00:11:58,479 --> 00:12:11,893
입력 X가 양수/음수를 모두 가지고 있으면 전부 같은 방향으로 움직이는
일은 발생하지는 않을 것입니다.
106
00:12:11,893 --> 00:12:17,819
이해 하셨습니까? 질문 있으신가요?
좋습니다.
107
00:12:21,453 --> 00:12:24,930
자 우리는 지금까지 sigmoid가 가진 문제에 대해서 배웠습니다.
108
00:12:24,930 --> 00:12:30,586
Saturation이 gradient를 죽일 수 있었습니다.
양/음의 방향으로 너무 큰 값을 가진다면 말이죠
109
00:12:30,586 --> 00:12:36,586
그리고 zero-centered 가 아니기 때문에
gradient 업데이트가 효율적이지 않았습니다.
110
00:12:36,586 --> 00:12:43,146
그리고 세 번째 문제는 exp()로 인해
계산비용이 크다는 것입니다.
111
00:12:43,146 --> 00:12:46,837
이 세 번째 문제는 그렇게 큰 문제는 아닙니다.
112
00:12:46,837 --> 00:12:51,186
큰 그림으로 봤을 때 다른 연산들, 가령
내적의 더 계산이 비쌉니다.
113
00:12:51,186 --> 00:12:55,103
하지만 굳이 문제로 뽑자면 이렇다는 것입니다.
114
00:12:58,986 --> 00:13:03,166
이제 두 번째 활성 함수를 한번 보겠습니다.
tanh입니다.
115
00:13:03,166 --> 00:13:10,999
sigmoid 랑 유사하죠. 하지만 범위가 [-1 , 1] 입니다.
116
00:13:10,999 --> 00:13:15,573
가장 큰 차이점이 있다면
이제 zero-centered 라는 것입니다.
117
00:13:15,573 --> 00:13:21,306
이를 통해 두 번째 문제가 해결됩니다. 하지만
saturation때문에 여전히 Gradient가 죽습니다.
118
00:13:21,306 --> 00:13:29,264
여기 보시면 여전히 gradient가 평평해 지는 구간이 있겠죠
119
00:13:29,264 --> 00:13:34,009
tanh는 sigmoid보다는 조금 낫지만
그래도 여전히 문제점은 있습니다.
120
00:13:36,586 --> 00:13:40,104
자 이제 ReLU 를 살펴보겠습니다.
121
00:13:40,104 --> 00:13:47,573
CNN 강의할 때 본 적 있으실 것입니다.
122
00:13:47,573 --> 00:13:53,279
Conv layer들 사이 사이에 ReLU가 있었죠
123
00:13:53,279 --> 00:13:58,253
ReLU의 함수는
f(x) = max(0,x) 입니다.
124
00:13:58,253 --> 00:14:06,573
이 함수는 element-wise 연산을 수행하며
입력이 음수면 값이 0이 됩니다.
125
00:14:06,573 --> 00:14:13,264
그리고 양수면 입력 값 그대로를 출력합니다.
126
00:14:13,264 --> 00:14:22,892
ReLU는 상당히 자주 쓰입니다. 그리고 기존 sigmoid와 tanh한테
있었던 문제점들을 한번 살펴보자면
127
00:14:22,892 --> 00:14:26,746
우선 ReLU는 양의 값에서는 saturetion되지 않습니다.
128
00:14:26,746 --> 00:14:34,465
적어도 입력스페이스의 절반은 saturation 되지 않을 것입니다.
ReLU의 가장 큰 장점이죠
129
00:14:34,465 --> 00:14:36,959
그리고 계산 효율이 아주 뛰어납니다.
130
00:14:36,959 --> 00:14:42,466
기존의 sigmoid는 함수 안에 지수 항이 있었죠
131
00:14:42,466 --> 00:14:48,968
반면에 ReLU는 단순히 max 연산이므로
계산이 매우 빠릅니다.
132
00:14:48,968 --> 00:14:57,063
ReLU를 사용하면 실제로 sigmoid나 tanh보다 수렴속도가
훨씬 빠릅니다. 거의 6배정도 더 빠르죠
133
00:14:57,063 --> 00:15:01,090
그리고 사실 생물학적 타당성도 ReLU가 sigmoid보다 큽니다.
134
00:15:01,090 --> 00:15:11,450
실제 신경과학적인 실험을 통해서 뉴런을 관찰해보면
135
00:15:11,450 --> 00:15:18,303
실제 뉴런의 입/출력 값을 확인해보면 sigmoid보다
ReLU 스럽다는 것을 알 수 있습니다.
136
00:15:18,303 --> 00:15:33,798
ImageNet 2012에서 우승한 AlexNet이 처음 ReLU를
사용하기 시작했습니다.
137
00:15:36,775 --> 00:15:42,082
그런데 ReLU에 문제가 하나 있다면 ReLU는 더이상
zero-centered가 아니라는 것입니다.
138
00:15:42,082 --> 00:15:49,228
tanh가 이 문제는 해결했는데 ReLU는 다시 이 문제를
가지고 있게 됩니다.
139
00:15:49,228 --> 00:15:52,122
이는 ReLU가 가진 이슈중 하나입니다.
140
00:15:52,122 --> 00:15:55,357
그리고 ReLU가 가진 골칫거리가 하나 더 있습니다.
141
00:15:55,357 --> 00:16:04,222
ReLU에서 양의 수에서는 saturation 되지 않지만
음의 경우에서는 그렇지 않습니다.
142
00:16:04,222 --> 00:16:06,882
좀 더 자세히 알아보겠습니다.
143
00:16:06,882 --> 00:16:11,255
X가 -10이면 어떻게 될까요?
144
00:16:11,255 --> 00:16:12,855
gradient가 0이 되겠죠
145
00:16:12,855 --> 00:16:16,522
그렇다면 x가 10일때는 어떻게 될까요?
146
00:16:17,455 --> 00:16:20,175
맞습니다.
선형 영역(linear regime)에 속합니다.
147
00:16:20,175 --> 00:16:30,442
x가 0일 때는 어떨까요? 물론 여기에서는 정의되지 않지만
실제로는 0입니다.
148
00:16:30,442 --> 00:16:35,074
기본적으로 ReLU는 gradient의 절반을 죽여버리는 셈입니다.
149
00:16:37,948 --> 00:16:45,708
그래서 우리는 dead ReLU 라는 현상을 겪을 수 있습니다.
150
00:16:45,708 --> 00:16:51,212
이런 일은 몇 가지 상황에서 발생할 수 있는데
151
00:16:51,212 --> 00:16:57,192
자 여기 data cloud가 있습니다.
여러분이 가진 traing data라고 생각하시면 됩니다.
152
00:16:59,033 --> 00:17:09,092
ReLU에서는 평면의 절반만 activate 된다는 것을 알 수 있습니다.
153
00:17:11,948 --> 00:17:15,640
각 평면(초록 빨강 직선)이 각 ReLU를 의미한다고 보시면 됩니다.
154
00:17:15,640 --> 00:17:21,201
그리고 ReLU가 data cloud에서 떨어져 있는 경우에
"dead ReLU" 가 발생할 수 있습니다.
155
00:17:21,201 --> 00:17:26,588
dead ReLU에서는 activate 가 일어나지 않고
update되지 않습니다. 반면 active ReLU는
156
00:17:26,588 --> 00:17:31,732
일부는 active되고 일부는 active하지 않을 것입니다.
157
00:17:31,732 --> 00:17:33,480
몇 가지 이유로 이런 일이 발생할 수 있습니다.
158
00:17:33,480 --> 00:17:37,201
우선 첫 번째로는
초기화를 잘 못한 경우 입니다.
159
00:17:37,201 --> 00:17:45,015
여기 dead ReLU 처럼 생긴 경우인데, 가중치 평면이
data cloud에서 멀리 떨어져 있는 경우입니다.
160
00:17:45,015 --> 00:17:55,069
이런 경우 어떤 데이터 입력에서도 activate 되는 경우가
존재하지 않을 것이고 backporp이 일어나지 않을 것입니다.
161
00:17:56,108 --> 00:17:59,321
이런 경우 update되지도 activate되지도 않을 것입니다.
162
00:17:59,321 --> 00:18:03,880
그리고 더 흔한 경우는
Leraning rate가 지나치게 높은 경우입니다.
163
00:18:03,880 --> 00:18:11,561
처음에 "적절한 ReLU" 로 시작할 수 있다고 해도 만약
update를 지나치게 크게 해 버려 가중치가 날뛴다면
164
00:18:11,561 --> 00:18:18,028
ReLU 가 데이터의 manifold를 벗어나게 됩니다.
이런 일들은 학습과정에서 충분히 일어날 수 있습니다.
165
00:18:18,028 --> 00:18:22,975
그래서 처음에는 학습이 잘 되다가
갑자기 죽어버리는 경우가 생기는 것입니다.
166
00:18:22,975 --> 00:18:24,108
그리고 실제로,
167
00:18:24,108 --> 00:18:33,361
그리고 실제로 학습을 다 시켜놓은 네트워크를 살펴보면
10~20% 가량은 dead ReLU가 되어 있습니다.
168
00:18:33,361 --> 00:18:40,001
이게 문제이긴 하지만 ReLU를 사용하고 있다면 대부분의
네트워크가 이 문제를 겪을 수 있습니다.
169
00:18:40,001 --> 00:18:49,467
일부는 dead ReLU가 되버리는 것을 관찰해 볼 수 있습니다.
하지만 그 정도면 네트워크 학습에 크게 지장이 있진 않습니다.
170
00:18:49,467 --> 00:18:51,268
질문 있나요?
171
00:18:51,268 --> 00:18:54,851
[학생이 질문]
172
00:19:01,908 --> 00:19:05,335
네 맞습니다.
Data cloud는 그냥 training data입니다.
173
00:19:05,335 --> 00:19:08,918
[학생이 질문]
174
00:19:17,641 --> 00:19:25,708
질문은 바로 data cloud에서 ReLU가 죽어버리는지 아닌지를
어떻게 알 수 있냐느 것입니다.
175
00:19:25,708 --> 00:19:30,988
여기 예를 다시 한 번 보겠습니다.
간단한 2차원의 경우입니다.
176
00:19:30,988 --> 00:19:42,278
ReLU의 입력 값은 가령 W1*X1 + W2*X2 같은 값이 되겠죠
177
00:19:42,278 --> 00:19:46,080
그리고 이 가중치가 초평면(초록 빨강)을 이루게 되겠죠
178
00:19:46,080 --> 00:19:51,453
그리고 여기에서 positive인 절반만 가져갈 것입니다.
나머지 절반은 죽어버리겠죠
179
00:19:51,453 --> 00:20:03,789
그러니 W의 초평면의 위치와 Data의 위치를 고려했을 때
초평면 자체가 Data와 동떨어지는 경우가 발생할 수 있습니다.
180
00:20:05,560 --> 00:20:14,329
학습 과정에서 일부 ReLU는 data cloud와 동떨어져
있을 수가 있습니다.
181
00:20:16,480 --> 00:20:18,050
질문 있나요?
182
00:20:18,050 --> 00:20:21,633
[학생이 질문]
183
00:20:23,380 --> 00:20:33,478
sigmoid의 두 가지 단점에 중에서 하나가 뉴런이
saturation 된다는 것이었습니다.
184
00:20:37,045 --> 00:20:40,500
sigmoid 슬라이드를 다시한번 보겠습니다.
185
00:20:40,500 --> 00:20:45,820
질문은 바로 input이 전부 positive면
saturation이 안되지 않냐는 것입니다.
186
00:20:45,820 --> 00:20:51,971
여기 입력이 모두 양수면
0의 오른쪽 지역으로 들어오는 것이겠죠
187
00:20:51,971 --> 00:20:54,464
그렇게 되도 여전히 saturation의 가능성이 있습니다.
188
00:20:54,464 --> 00:21:00,544
왜냐하면 positive region에서도 여전히
평평한 곳이 존재하기 때문입니다.
189
00:21:00,544 --> 00:21:08,846
양의 큰 값이 들어오면, 여기 평평한 지역 때문에 여전히
gradient가 0이 될 수 있을 것입니다.
190
00:21:10,715 --> 00:21:11,548
좋습니다.
191
00:21:16,355 --> 00:21:24,528
그래서 실제로 ReLU를 초기화할때
positive biases를 추가해 주는 경우가 있습니다.
192
00:21:24,528 --> 00:21:30,721
Update 시에 active ReLU가 될 가능성을 조금이라도 더
높혀주기 위해서죠
193
00:21:30,721 --> 00:21:40,430
하지만 이게 도움이 된다는 의견도 있고
그렇지 않다는 사람들도 있습니다.
194
00:21:40,430 --> 00:21:48,072
이 방법을 항상 사용하지는 않고, 대부분은 사람들은
zero-bias로 초기화합니다.
195
00:21:49,483 --> 00:21:54,777
ReLU 이후에 조금 수정된 버전이 나왔습니다.
196
00:21:54,777 --> 00:21:57,768
그 중 하나가 바로 leaky ReLU 라는 녀석입니다.
197
00:21:57,768 --> 00:22:04,429
ReLU와 유사하지만 negarive regime에서
더 이상 0이 아닙니다.
198
00:22:04,429 --> 00:22:11,955
negative에도 기울기를 살짝 주게 되면 앞서 설명했던
문제를 상당 부분 해결하게 됩니다.
199
00:22:11,955 --> 00:22:17,142
Leaky ReLU의 경우에는 negative space 에서도
saturation 되지 않습니다.
200
00:22:17,142 --> 00:22:23,968
여전히 계산이 효율적입니다. 그리고 sigmoid 나 tanh보다
수렴을 빨리 할 수 있습니다. 그리고 ReLU랑도 비슷하게 생겼죠
201
00:22:23,968 --> 00:22:27,218
그리고 dead ReLU 현상도 더 이상 없습니다.
202
00:22:28,923 --> 00:22:35,380
또 다른 예시로는
parametric rectifier, PReLU 가 있습니다.
203
00:22:35,380 --> 00:22:42,195
PReLU는 negative space에 기울기가 있다는 점에서
Leaky ReLU와 유사하다는 것을 알 수 있습니다.
204
00:22:42,195 --> 00:22:47,088
다만 여기에서는 기울기가 alpha 라는
파라미터로 결정됩니다.
205
00:22:47,088 --> 00:22:52,982
alpha를 딱 정해놓는 것이 아니라 backpro으로
학습시키는 파라미터로 만든 것입니다.
206
00:22:52,982 --> 00:22:57,555
활성함수가 조금 더 유연해 질 수 있을 것입니다.
207
00:22:57,555 --> 00:23:02,342
또 다른 예시로
ELU라는 것도 있습니다.
208
00:23:02,342 --> 00:23:08,295
우리는 지금 LU 패밀리들을 보고 있습니다.
209
00:23:08,295 --> 00:23:10,341
ELU는 ReLu의 이점을 그대로 가져옵니다.
210
00:23:10,341 --> 00:23:14,508
하지만 ELU는 zero-mean 에 가까운 출력값을 보입니다.
211
00:23:16,181 --> 00:23:24,901
zero-mean에 가까운 출력은 앞서 leaky ReLU, PReLU
가 가진 이점이었죠
212
00:23:26,699 --> 00:23:36,538
하지만 Leaky ReLU와 비교해보면 ELU는 negative에서
"기울기" 를 가지는 것 대신에 또 다시 "saturation" 됩니다.
213
00:23:36,538 --> 00:23:43,029
ELU가 주장하는건 이런 saturation이 좀더
잡음(noise)에 강인할 수 있다는 것입니다.
214
00:23:43,029 --> 00:23:48,566
이런 deactivation이 좀더 강인함을 줄 수 있다고 주장합니다.
215
00:23:48,566 --> 00:23:55,885
ELU의 논문에서는 왜 ELU가 더 강인한지에
타당성을 다양하게 제시하고 있습니다.
216