-
Notifications
You must be signed in to change notification settings - Fork 207
/
Lecture 3 Loss Functions and Optimization.ko.srt
3685 lines (2877 loc) · 101 KB
/
Lecture 3 Loss Functions and Optimization.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
1
00:00:00,000 --> 00:00:06,000
Translated by visionNoob, KNU
https://github.com/insurgent92/CS231N_17_KOR_SUB
2
00:00:07,755 --> 00:00:11,682
CS231N 3강입니다.
3
00:00:11,682 --> 00:00:14,594
오늘은 손실함수(Loss functions)와
최적화(Optimization)을 배울겁니다.
4
00:00:14,594 --> 00:00:20,129
진도 나가기에 앞서 공지사항을 전달합니다.
5
00:00:21,094 --> 00:00:24,547
먼저, 첫 번째 과제가 생겼습니다.
6
00:00:24,547 --> 00:00:26,889
웹사이트에서 확인하실 수 있습니다.
7
00:00:26,889 --> 00:00:30,086
과제를 좀 늦게 내드렸기 때문에
8
00:00:30,086 --> 00:00:35,264
4월 20일 목요일 오후 11시 59분으로 기한을 변경합니다.
9
00:00:36,374 --> 00:00:42,702
앞으로 2주정도 라고 보시면 됩니다.
10
00:00:42,702 --> 00:00:49,087
그리고 변경된 기한으로 강의계획서를 업데이트하겠습니다.
11
00:00:49,087 --> 00:00:54,617
과제를 완료하면 zip파일로 Canvas에 업로드해야 하며
12
00:00:54,617 --> 00:00:57,779
가능한 빨리 채점을 하도록 하겠습니다.
13
00:00:58,799 --> 00:01:04,879
다음 사항은 여러분이 공지사항을 확인하려면
항상 Piazza를 체크해야 한다는 것입니다.
14
00:01:04,879 --> 00:01:11,432
이번주에 Piazza에 몇가지 예제 프로젝트를
공고해 놓을 것입니다.
15
00:01:11,432 --> 00:01:17,220
그래서 Stanford 커뮤니티와, 혹은 Stanford와 연계된
분들로부터 프로젝트 아이디와 관련된 예시를 부탁드렸는데,
16
00:01:17,220 --> 00:01:24,583
그리고 그 분들이 이 수업을 듣는 학생들과 함께 프로젝트를
진행하고 싶다는 제안을 해주셨습니다.
17
00:01:24,583 --> 00:01:26,986
그러니 Piazza에 공고를 확인해 보시고
18
00:01:26,986 --> 00:01:34,231
하고싶은 프로젝트가 있으면 자유롭게
프로젝트 멘토와 직접 얘기하면 되겠습니다.
19
00:01:34,231 --> 00:01:37,090
추가적으로 강의 홈피에 근무시간을
게시하였습니다.
20
00:01:37,090 --> 00:01:45,077
구글 캔린더로 게시하였고 학생들이 근무시간에 대해
많이 물어봐서 이번에 게시하였습니다.
21
00:01:45,077 --> 00:01:48,307
마지막 공지는 구글 클라우드 관련된 것입니다.
22
00:01:48,307 --> 00:01:54,331
구글 클라우드에서 우리 강의를 지원하므로
23
00:01:54,331 --> 00:02:00,687
여러분의 과제와 프로젝트를 수행하기 위해
구글 클라우드 크래딧 100$를 지급하였으며
24
00:02:00,687 --> 00:02:05,246
사용하는 방법은 추후 Piazza에 공지하겠습니다.
25
00:02:05,246 --> 00:02:11,977
공지사항에 대한 질문이 없으면 진도를 나가겠습니다.
26
00:02:13,440 --> 00:02:14,273
좋습니다.
27
00:02:15,559 --> 00:02:17,997
저번 2강을 복습해보면
28
00:02:17,997 --> 00:02:20,412
인식에서의 어려운 점을 살펴보았고
29
00:02:20,412 --> 00:02:24,476
데이터 중심의 방식에 초점을 마춰보았습니다.
30
00:02:24,476 --> 00:02:29,160
그리고 이미지 분류에 대해 배웠고
왜 이미지 분류가 어려운지, 그리고
31
00:02:29,160 --> 00:02:35,812
컴퓨터가 보는것과 사람이 보는 것의 차이가 있다는 것도 배웠습니다.
32
00:02:35,812 --> 00:02:42,124
그리고 분류를 어렵게하는 조명의 변화, 변형에 대해 다뤘고
왜 이게 그토록 어려운지에 대해 배웠습니다.
33
00:02:42,124 --> 00:02:47,912
인간의 시각체계는 이 일을 엄청 쉽게 하는데도 말이죠
34
00:02:47,912 --> 00:02:50,421
그리고 KNN 분류기도 배웠습니다.
35
00:02:50,421 --> 00:02:55,309
데이터 중심 접근방법 중에 가장 단순한 방법이었죠.
36
00:02:55,309 --> 00:03:00,824
그리고 CIFAR-10도 배웠습니다. 저기 좌상단에 보이는
이미지들이죠.
37
00:03:00,824 --> 00:03:05,787
CIFAR-10은 비행기, 자동차 등 10개의 카테고리가 있습니다.
38
00:03:05,787 --> 00:03:11,202
그리고 어떻게 KNN을 이용해서 학습 데이터를 가지고
각 카테고리 클래스를 분류하는
39
00:03:11,202 --> 00:03:15,746
결정 경계를 학습시킬 수 있는지도 배웠습니다.
40
00:03:15,746 --> 00:03:25,190
또한 크로스 벨리데이션데 대해서도 배웠고 트레인, 벨리데이션,
테스트셋으로 나눠서 하이퍼파라미터를 찾는 법도 배웠습니다.
41
00:03:25,190 --> 00:03:32,410
그리고 2강 마지막에는 Linear classification에 대해 배웠
습니다. Linear classifier는 뉴럴넷의 기본요소입니다.
42
00:03:32,410 --> 00:03:38,538
Linear classifier는 parametric classifier의
일종입니다. parametric classifier라는 것은
43
00:03:38,538 --> 00:03:45,444
트레이닝 데이터의 정보가 파라미터인 "행렬 W"로 요약된
다는 것을 뜻합니다. 그리고 W가 학습되는 것입니다.
44
00:03:45,444 --> 00:03:48,448
그리고 이 Linear classifier는 상당히 간단합니다.
45
00:03:48,448 --> 00:03:51,810
이미지를 입력받으면 하나의 긴 벡터로 폅니다.
46
00:03:51,810 --> 00:03:54,974
여기 이미지 x가 있고,
47
00:03:54,974 --> 00:04:02,918
이 이미지는 32x32x3 픽셀이고,
이를 긴 열벡터로 펼치게 됩니다.
48
00:04:04,344 --> 00:04:09,722
32x32는 이미지의 높이와 너비이며 3은
이미지의 채널 red, green, blue 입니다.
49
00:04:09,722 --> 00:04:13,561
그리고 파라미터 "행렬 W"가 있는데
50
00:04:13,561 --> 00:04:18,517
이 행렬은 아까 만들었던 이미지 픽셀과 연산하여
51
00:04:18,517 --> 00:04:24,387
CIFAR-10의 각 10개의 클래스에 해당하는
클래스 스코어를 만들어줍니다.
52
00:04:24,387 --> 00:04:29,617
그리고 해석해보면 스코어가 더 큰 값은
53
00:04:29,617 --> 00:04:34,881
가령 고양이 클래스의 스코어가 더 크다는 것은
분류기가 이 이미지가 고양이일것 같다고 생각하는 것입니다.
54
00:04:34,881 --> 00:04:42,443
반대로 개나 자동차 클래스의 스코어가 더 낮다는 것은
이 이미지가 개나 자동차일 확률이 낮다는 것을 의미하는 것입니다.
55
00:04:42,443 --> 00:04:51,625
또한 지난 수업에서 설명이 좀 부족했던 부분이 있었습니다.
Linear clssification을 각 클래스 템플릿으로 보는 것인데
56
00:04:51,625 --> 00:05:02,444
좌하단의 다이어그램을 보시면, 행렬 W에는 각 10개의 클래스와
이미지의 모든 픽셀에 대응되는 하나씩의 요소가 있습니다.
57
00:05:02,444 --> 00:05:06,554
그리고 이 것은 "이 픽셀이 클래스를 결정하는데
얼마나 중요한 역할을 하는지"를 의미합니다.
58
00:05:06,554 --> 00:05:12,412
행렬 W의 각 행들이 해당하는 그 클래스의
템플릿이 되는 것입니다.
59
00:05:12,412 --> 00:05:22,551
행렬 W의 각 행은 "이미지의 픽셀 값"과 "해당 클래스" 사이의
가중치가 되기 때문에
60
00:05:22,551 --> 00:05:29,900
그렇기 때문에 우리가 각 행을 풀어서 다시 한 이미지로 재구성하면
각 클래스에 대응하는 학습된 템플릿을 볼 수 있었습니다.
61
00:05:29,900 --> 00:05:35,399
그리고 또한 Linear clssification이 고차원 공간에서의
일종의 "결정 경계"를 학습한다는 측면으로 볼 수 있는데,
62
00:05:35,399 --> 00:05:43,774
그 공간의 차원은 이미지의 픽셀 값에 해당하는 것입니다.
63
00:05:43,774 --> 00:05:47,571
지난 시간에 여기까지 진행했습니다.
64
00:05:47,571 --> 00:05:54,141
지난 시간에는 Linear classifier에 대한 간략한 아이디어만
배우고 끝났습니다.
65
00:05:54,141 --> 00:05:57,554
그때는 실제로 행렬W를 어떻게 만드는지는
다루지 않았습니다.
66
00:05:57,554 --> 00:06:02,628
가장 좋은 행렬W를 구하는데 어떻게 트레이닝 데이터를
활용해야 하는지는 언급하지 않았었습니다.
67
00:06:02,628 --> 00:06:08,292
지난 시간에는 임의의 행렬 W를 사용했었고,
68
00:06:08,292 --> 00:06:12,068
그 행렬 W를 가지고 각 이미지에 해당하는
10개의 클래스 스코어를 계산하였습니다.
69
00:06:12,068 --> 00:06:15,597
이 때의 클래스 스코어는 좋을수도, 나쁠수도 있었습니다.
(임의로 정한 것이니까)
70
00:06:15,597 --> 00:06:20,833
여기 간단한 예시가 있는데 세개의 트레이닝 데이터에 대한
71
00:06:20,833 --> 00:06:26,046
임의의 행렬W를 가지고 예측한 10개의 클래스 스코어입니다.
72
00:06:26,046 --> 00:06:29,506
굵게 표시한 각 스코어를 보면 더 좋은것도 있고
나쁜 것도 있다는 것을 볼 수 있습니다.
73
00:06:29,506 --> 00:06:35,924
예컨데 왼쪽의 이미지를 보면 고양이이죠
우리는 인간이니까 아주 쉽게 알 수 있죠.
74
00:06:35,924 --> 00:06:41,068
하지만 고양이에 부여된 확률을 보면,
(확률이 아니라 스코어죠)
75
00:06:41,068 --> 00:06:48,082
이 분류기가 cat에는 2.9점을 줬습니다.
76
00:06:48,082 --> 00:06:51,018
반면 frog에는 3.78점을 줬군요
77
00:06:51,018 --> 00:06:57,920
이 분류기는 별로 좋아보이지 않습니다. 우리는 정답 클래스(고양이)
가 가장 높은 점수가 되는 분류기를 원합니다.
78
00:06:57,920 --> 00:07:02,729
반면 다른 예를 살펴봅시다. 자동차를 보면
79
00:07:02,729 --> 00:07:06,819
자동차 이미지에서는 자동차의 스코어가 제일 높습니다.
좋은 거죠
80
00:07:06,819 --> 00:07:14,357
개구리의 예를 보면 스코어가 -4입니다. 오히려
다른 스코어보다도 훨씬 낮습니다. 엄청 안좋은 것입니다.
81
00:07:14,357 --> 00:07:16,531
이렇게 분석하는 방법은 좋지 않습니다.
82
00:07:16,531 --> 00:07:20,654
스코어를 눈으로 훑으면서 어느게 좋고
어느게 나쁜지 살펴보기만 하는것은 좋은 생각이 아닙니다.
83
00:07:20,654 --> 00:07:25,264
이런 알고리즘을 만들고, 어떤 W가 가장 좋은지를
결정하기 위해서는
84
00:07:25,264 --> 00:07:31,032
지금 만든 W가 좋은지 나쁜지를 정량화 할 방법이 필요합니다.
85
00:07:31,032 --> 00:07:41,987
W를 입력으로 받아서 각 스코어를 확인하고 이 W가 지금 얼마나
거지같은지를 정량적으로 말해주는 것이 바로 손실함수입니다.
86
00:07:41,987 --> 00:07:49,782
이번 강의에서는 Image classification에서 쓸만한
몇가지 손실함수를 소개해 드리도록 하겠습니다.
87
00:07:49,782 --> 00:07:52,683
손실함수가 어떤 일을 해야하는지 한번 생각해 보세요.
88
00:07:52,683 --> 00:07:58,498
임의의 값 W가 얼마나 좋은지 나쁜지를 정량화해 줘야 합니다.
89
00:07:58,498 --> 00:08:04,770
우리가 실제로 원하는 것은, 행렬 W가 될 수 있는
모든 경우의 수에 대해서
90
00:08:04,770 --> 00:08:10,688
"가장 덜 구린" W가 무엇인지를 찾고싶은 것입니다.
91
00:08:10,688 --> 00:08:12,860
이 과정이 바로 "최적화 과정" 이며
92
00:08:12,860 --> 00:08:16,276
최적화에 대해서는 좀 있다가 다시 다루겠습니다.
93
00:08:16,276 --> 00:08:21,003
일단 문제를 좀 줄여보겠습니다. 클래스 10개는
다루기가 불편하니깐요
94
00:08:21,003 --> 00:08:28,886
이번 강의에서는 클래스를 3개로 하는
toy 데이터셋을 사용하겠습니다.
95
00:08:28,886 --> 00:08:44,425
이 예제에서 "고양이" 클래스는 잘 분류되지 못했고 "자동차" 는 잘됐고
"개구리"는 최악입니다. 개구리 점수는 다른 것보다 더 낮습니다.
96
00:08:44,425 --> 00:08:48,817
이를 좀 더 공식화해 봅시다.
손실 함수에 대해 생각해보면
97
00:08:48,817 --> 00:08:52,870
트레이닝 데이터 X와 Y가 있고
98
00:08:52,870 --> 00:08:56,196
보통 X는 알고리즘의 입력에 해당하고
99
00:08:56,196 --> 00:09:05,407
Image classification 알고리즘이라면 X는 이미지가 될 것이고
Y는 예측하고자 하는 것이 될 것입니다.
100
00:09:05,407 --> 00:09:08,930
보통은 Y는 레이블이나 타겟이라고 합니다.
101
00:09:08,930 --> 00:09:16,797
Image classification의 경우라면 각 이미지를 CIFAR-10
의 10개의 카테고리 중 하나로 분류하는 것이고,
102
00:09:16,797 --> 00:09:24,414
여기에서 레이블 y는 1에서 10 사이의 정수 값이 됩니다.
프로그래밍 언어에 따라 0에서 9 일수도 있습니다.
103
00:09:24,414 --> 00:09:30,270
어쨌든 이 y라는 정수값은 각 이미지 x의
정답 카테고리를 의미합니다.
104
00:09:30,270 --> 00:09:42,838
앞서 예측 함수를 정의했었죠 입력 이미지 x와 행렬 W를 입력으로 받아서
y를 예측하는 것입니다.
105
00:09:42,838 --> 00:09:46,446
Image classification 문제라면 y는 10개가 되겠습니다.
(CIFAR-10의 경우)
106
00:09:46,446 --> 00:09:49,938
그 다음 손실함수 L_i를 정의합니다.
107
00:09:49,938 --> 00:09:56,804
앞서 말씀드린 예측함수 f와 정답 값 Y를 입력으로 받아서는
108
00:09:56,804 --> 00:10:02,510
이 트레이닝 샘플을 얼마나 구리게 예측하는지를
정량화 시켜 줍니다.
109
00:10:02,510 --> 00:10:10,478
그리고 최종 Loss인 "L"은 우리 데이터 셋에서
각 N개의 샘플들의 Loss의 평균이 됩니다.
110
00:10:10,478 --> 00:10:13,432
이 함수는 아주 일반적인 공식입니다.
111
00:10:13,432 --> 00:10:16,421
그리고 Image classification 외에도 다양하게
확장할 수 있습니다.
112
00:10:16,421 --> 00:10:24,426
좀 더 나아가서 다른 딥러닝 알고리즘을 살펴보자면
어떤 알고리즘이던 가장 일반적으로 진행되는 일은,
113
00:10:24,426 --> 00:10:33,535
일단 어떤 X와 Y가 존재하고, 여러분이 만들 파라미터 W에
W가 얼마나 좋은지를 정량화하는 손실 함수를 만드는 것입니다.
114
00:10:33,535 --> 00:10:39,982
결국은 W의 공간을 탐색하면서 의트레이닝 데이터의
Loss를 최소화하는 어떤 W를 찾게 될 것입니다.
115
00:10:41,081 --> 00:10:49,322
구체적으로 한 손실함수의 예를 들어보겠습니다.
이 손실함수는 Image classification에 아주 적합하기도 합니다.
116
00:10:49,322 --> 00:10:52,755
multi-class SVM loss를 대해 알아보겠습니다.
117
00:10:52,755 --> 00:10:59,602
아마 CS229에서 이진 SVM(Support Vector Machine)
본 적이 있을 것입니다.
118
00:11:00,662 --> 00:11:05,263
multi-class SVM은 여러 클래스를 다루기 위한
이진 SVM의 일반화된 형태입니다.
119
00:11:05,263 --> 00:11:11,797
CS229에서 다뤘던 이진 SVM은 두개의 클래스만 다룹니다.
120
00:11:11,797 --> 00:11:15,159
각 데이터는 Positive 또는 Negative로 분류될 뿐입니다.
121
00:11:15,159 --> 00:11:20,762
하지만 여긴 10개의 카테고리가 있기 때문에
여러개의 클래스를 다루려면 이 개념을 좀더 일반화 시켜야 합니다.
122
00:11:20,762 --> 00:11:24,854
그렇기 때문에 multi-class SVM의 손실함수는
조금 재밌게 생겼습니다.
123
00:11:24,854 --> 00:11:29,801
지금부터는 이에 대해 좀 더 자세히 알아보도록 하겠습니다.
124
00:11:29,801 --> 00:11:35,584
각각의 트레이닝 데이터에서 Loss L_i
를 구하는 방법 부터 살펴보겠습니다.
125
00:11:35,584 --> 00:11:43,373
L_i를 구하기 위해 우선 "True인 카테고리" 를 제외한
"나머지 카테고리 Y"의 합을 구합니다.
126
00:11:43,373 --> 00:11:46,204
다시말해 맞지 않는 카테고리를 전부 합치는 것입니다.
127
00:11:46,204 --> 00:11:52,509
그리고 올바른 카테고리의 스코어와 올바르지 않은 카테고리의
스코어를 비교해 봅니다.
128
00:11:52,509 --> 00:11:59,589
만약 올바른 카테고리의 점수가 올바르지 않은 카테고리의
점수보다 더 높으면
129
00:11:59,589 --> 00:12:03,814
그리고 그 격차가 일정 마진(safety margin) 이상이라면,
이 예시에서는 그 마진을 1로 두었죠
130
00:12:03,814 --> 00:12:14,661
이 경우는 True인 스코어가 다른 false 카테고리보다 훨씬 더
크다는 것을 의미합니다.
131
00:12:14,661 --> 00:12:17,663
그렇게 되면 Loss는 0이 됩니다.
132
00:12:17,663 --> 00:12:21,703
이미지 내 정답이 아닌 카테고리의 모든 값들을 합치면
133
00:12:21,703 --> 00:12:27,155
그 값이 바로 한 이미지의 최종 Loss 가 되는 것입니다.
134
00:12:27,155 --> 00:12:31,994
그리고 전체 트레이닝 데이터 셋에서 그 Loss들의 평균을 구합니다.
135
00:12:31,994 --> 00:12:41,263
이걸 수식화 시키면 if-then 으로 표현 할 수 있습니다.
(if:)정답 클래스의 스코어의 점수가 제일 높으면
136
00:12:41,263 --> 00:12:49,327
그럼 "then" 은 다음과 같이 나타낼 수 있습니다.
then, max(0,s_j - s_yj + 1).
137
00:12:50,496 --> 00:12:54,294
그리고 수식을 보다가 헷갈리 때가 있는데
138
00:12:54,294 --> 00:13:00,920
그러면 직접 손으로 써보면서 이해하면 도움이 됩니다.
139
00:13:00,920 --> 00:13:06,805
그리고 0과 다른 값의 최댓값, Max(0, value)
과 같은 식으로 손실 함수를 만드는데,
140
00:13:06,805 --> 00:13:14,627
이런 류의 손실 함수를 "hinge loss"(경첩)라고 부르기도 합니다.
그래프의 모양때문에 붙혀진 이름입니다.
141
00:13:14,627 --> 00:13:22,275
여기에서 x축은 S_Yi입니다.
실제 정답 클래스의 스코어입니다.
142
00:13:22,275 --> 00:13:25,353
그리고 y축은 Loss입니다.
143
00:13:25,353 --> 00:13:34,174
정답 카테고리의 점수가 올라갈수록 Loss가 선형적으로
줄어드는 것을 알 수 있습니다.
144
00:13:34,174 --> 00:13:40,235
이 로스는 0이 된 이후에도 Safety margin 을
넘어설 때 까지 더 줄어듭니다.
145
00:13:40,235 --> 00:13:44,402
Loss가 0이 됐다는 건 클래스를 잘 분류했다는 뜻입니다.
146
00:13:45,550 --> 00:13:47,836
질문 있나요?
147
00:13:47,836 --> 00:13:52,410
[죄송합니다만, S_Yi가 뭔가요?]
148
00:13:52,410 --> 00:13:55,170
[정답 스코어인가요? ]
149
00:13:55,170 --> 00:13:56,321
네 질문은
150
00:13:56,321 --> 00:14:00,097
S가 어떤 것이고 S_Yi가 어떤 것인지 입니다.
151
00:14:00,097 --> 00:14:07,246
S는 분류기의 출력으로 나온 예측된 스코어 입니다.
152
00:14:07,246 --> 00:14:13,942
가령 1이 고양이고 2가 개면
S_1은 고양이 스코어 S_2는 개 스코어 인 것이죠
153
00:14:13,942 --> 00:14:21,056
Y_i는 이미지의 실제 정답 카테고리 입니다. 정수 값이죠
154
00:14:21,056 --> 00:14:32,683
그러니 S_Y_i는 트레이닝 셋의 i번째 이미지의
정답 클래스의 스코어인 것입니다.
155
00:14:32,683 --> 00:14:33,870
질문 있으십니까?
156
00:14:33,870 --> 00:14:35,921
[질문 중]
157
00:14:35,921 --> 00:14:38,677
질문은, 그럼 정확히 무엇을 계산하는 것인지 입니다.
158
00:14:38,677 --> 00:14:44,590
무엇을 계산하는지는 흥미로운 주제입니다.
앞으로 예제를 살펴보면 답을 찾을 수 있을 것입니다.
159
00:14:44,590 --> 00:14:51,984
이 Loss가 말하고자 하는 것은 정답 스코어가
다른 스코어들보다 높으면 좋다는 것입니다.
160
00:14:51,984 --> 00:14:58,364
정답 스코어는 safty margin(여기에서 1) 을 두고
다른 스코어들 보다 훨씬 더 높아야 합니다.
161
00:14:58,364 --> 00:15:06,534
충분히 높지 않으면 Loss가 높아지게 됩니다.
162
00:15:06,534 --> 00:15:13,223
3개의 트레이닝 데이터셋을 가지고 예를 들어보면
좀 더 감을 익힐 수 있을 것입니다.
163
00:15:13,223 --> 00:15:19,513
여기서는 case space notation을 제거하고
zero one notation을 사용했습니다.
164
00:15:19,513 --> 00:15:26,186
맨 왼쪽의 예시를 보면서 multi-class SVM loss가
계산 되는 과정을 살펴보자면
165
00:15:26,186 --> 00:15:31,913
우선 정답이 아닌 클래스를 순회합니다.
166
00:15:31,913 --> 00:15:39,089
Cat은 정답 클래스이니, Car와 Flog 클래스를 순회합니다.
이제 다시 Car의 경우를 살펴보면
167
00:15:41,088 --> 00:15:48,782
이제 (Car 스코어) 5.1 - (Cat 스코어) 3.2 + 1(magin)
을 구합니다. Cat과 Car를 비교할때 짐작할 수 있는 것은
168
00:15:49,969 --> 00:15:55,134
Car가 Cat보다 더 높으니까 Loss가 발생할 것이라는 것입니다.
169
00:15:55,134 --> 00:15:59,153
이 고양이 이미지의 예시를 보면
170
00:15:59,153 --> 00:16:03,387
2.9의 손실이 발생합니다.
Cat-Car 와 Car-Flog를 비교해보면
171
00:16:03,387 --> 00:16:08,480
Car는 3.2, Flog는 -1.7의 에러가 발생합니다.
172
00:16:08,480 --> 00:16:16,409
Cat 스코어는 Frog 스코어보다 훨씬 그므로
Loss는 0이라고 할 수 있습니다.
173
00:16:16,409 --> 00:16:23,094
고양이 이미지의 Multiclass-SVM Loss는
이런 클래스쌍의 Loss의 합이 되며
174
00:16:23,094 --> 00:16:27,112
즉 2.9 + 0 = 2.9 가 되는 것입니다.
175
00:16:27,112 --> 00:16:34,567
여기에서 2.9라는 숫자가 "얼마나 분류기가 이 이미지를
구리게 분류하는지" 에 대한 척도가 되겠습니다.
176
00:16:32,950 --> 00:16:35,367
177
00:16:35,795 --> 00:16:41,574
이런 작업은 여러번 반복합니다.
Car 클래스에 다시한번 해보면
178
00:16:41,574 --> 00:16:52,072
Car와 Cat을 비교해 볼 것입니다. Car 스코어가 Cat 스코어보다 높기
때문에 여기에서 Loss는 0이 될 것입니다.
179
00:16:52,072 --> 00:16:57,557
Car 와 Frog도 비교해보면 Car의 스코어가 Frog보다 훨씬
더 크다는 것을 알 수 있습니다.
180
00:16:57,557 --> 00:17:02,993
그러므로 Car 의 경우는 전체 Loss도 0이 되겠습니다.
181
00:17:02,993 --> 00:17:09,051
이미 다들 감을 잡으셨겠지만 개구리, frog의 경우도 한번 봅시다.
182
00:17:09,051 --> 00:17:14,895
Frog와 Cat을 보면 엄청 큰 Loss가 발생함을 알 수 있습니다.
Flog스코어가 엄청 낮기 때문이죠. Car와의 경우도 같습니다.
183
00:17:14,895 --> 00:17:19,697
또한 Frog 스코어 자체가 엄청 낮기 때문이죠.
결국 전체 Loss는 12.9가 됩니다.
184
00:17:21,150 --> 00:17:26,578
그리고 전체 트레이닝 셋의 최종 Loss는
각 트레이닝 이미지의 Loss들의 평균이 되겠습니다.
185
00:17:26,578 --> 00:17:29,277
대략 5.3정도 나오는 걸 볼 수 있습니다.
186
00:17:29,277 --> 00:17:34,929
이것이 의미하는 바는, 우리의 분류기가 5.3점 만큼 이 트레이닝 셋을
구리게 분류하고 있다는 "정량적 지표" 가 되는 것입니다.
187
00:17:34,929 --> 00:17:36,732
질문 있으십니까?
188
00:17:36,732 --> 00:17:39,152
[질문 중]
189
00:17:39,152 --> 00:17:41,920
질문은 바로, "1을 더하는 것"은 어떻게 결정하는 것인지 입니다.
(safety margin 이 1이었음)
190
00:17:41,920 --> 00:17:43,574
아무 좋은 질문입니다.
191
00:17:43,574 --> 00:17:46,662
이게 아무 숫자나 막 끼워 넣은 것 같아 보이고
192
00:17:46,662 --> 00:17:52,532
이게 또 손실 함수에서 상수 텀으로 자리잡고 있고
그래서 보기에 불쾌할 수도 있는데요
193
00:17:52,532 --> 00:18:00,305
이게 임의로 선택한 숫자같아 보이긴 하지만, 우리는 사실 손실함수의
"스코어가 정확이 몇인지"는 신경쓰지 않습니다.
194
00:18:00,305 --> 00:18:05,389
우리가 궁금한건 여러 스코어 간의 상대적인 차이인 것입니다.
195
00:18:05,389 --> 00:18:08,944
우리가 관심있어 하는건 오로지 정답 스코어가 다른 스코어에 비해
얼마나 더 큰 스코어를 가지고 있는지 입니다.
196
00:18:08,944 --> 00:18:14,742
행렬 W를 전체적으로 스케일링한다고 생각해 보면
결과 스코어도 이에 따라 스케일이 바뀔 것입니다.
197
00:18:14,742 --> 00:18:20,808
이와 관련된 내용이 온라인 코스 노트에 자세히 나와 있습니다.
198
00:18:20,808 --> 00:18:24,362
그걸 보면 1 이라는게 별 상관 없다는 것을 알게 될 것입니다.
199
00:18:24,362 --> 00:18:32,625
1이라는 파라미터는 없어지고, W의 스케일에 의해 상쇄됩니다.
200
00:18:32,625 --> 00:18:35,489
자세한 내용은 온라인 코스노트를 확인해 주시면 되겠습니다.
201
00:18:37,953 --> 00:18:45,374
그 Loss가 실제무 무슨 일을 하는지를 직관적으로 이해하는
것이 중요하므로 다른 질문들로 다시 접근해 보겠습니다.
202
00:18:45,374 --> 00:18:53,349
만약 Car 스코어가 조금 변하면 Loss에는 무슨 일이 일어날까요?
203
00:18:53,349 --> 00:18:54,182
아이디어 있으십니까?
204
00:18:56,479 --> 00:18:59,856
다들 대답하기 무서워 하는것 같네요
205
00:18:59,856 --> 00:19:00,689
정답?
206
00:19:00,689 --> 00:19:04,272
[대답 하는 학생]
207
00:19:06,983 --> 00:19:13,333
대답은 우리가 Car의 스코어를 조금 바꾸더라고
Loss가 바뀌지 않을 것이라고 대답했습니다.
208
00:19:13,333 --> 00:19:21,918
다시 SVM loss를 상기해보면 이 loss는 오직 정답 스코어와
그 외의 스코어와의 차이만 고려했습니다. 따라서 이 경우에는
209
00:19:21,918 --> 00:19:25,506
Car 스코어가 이미 다른 스코어들보다 엄청 높기 때문에
210
00:19:25,506 --> 00:19:35,437
여기 스코어를 조금 바꾼다고 해도, 서로 간의 간격(Margin)은 여전히
유지될 것이고, 결국 Loss는 변하지 않습니다. 계속 0일 것입니다.
211
00:19:36,870 --> 00:19:40,150
다음 질문은 SVM Loss가 가질 수 있는
최댓/최솟값이 어떻게 될까요?
212
00:19:43,265 --> 00:19:44,445
[대답하는 학생]
213
00:19:44,445 --> 00:19:45,764
잘 못들었습니다?
214
00:19:45,764 --> 00:19:52,018
최솟값은 0이 되겠죠. 왜냐하면 모든 클래스에 걸쳐서
215
00:19:52,018 --> 00:19:57,357
정답 클래스의 스코어가 제일 크면
모든 트레이닝 데이터에서 loss가 0이 될테니깐요
216
00:19:57,357 --> 00:20:03,495
그리고 다시 이 손실 함수가 hinge loss 모양이라는 점을 고려해 보면,
217
00:20:03,495 --> 00:20:07,981
만약 정답 클래스 스코어가 엄청 낮은 음수 값을 가지고
있다고 생각해보면, 아마 Loss가 무한대 일 것입니다.
218
00:20:07,981 --> 00:20:11,538
그러니 최솟값은 0이고 최댓값을 무한대 일 것입니다.
219
00:20:11,538 --> 00:20:16,120
또 한가지는, 파라미터를 초기화하고
처음부터 학습시킬때
220
00:20:16,120 --> 00:20:21,242
보통은 행렬W를 임의의 작은 수로 초기화시키는데, 그렇게되면
221
00:20:21,242 --> 00:20:25,535
처음 학습 시에는 결과 스코어가 임의의 일정한 값을 갖게 됩니다.
222
00:20:25,535 --> 00:20:31,449