-
Notifications
You must be signed in to change notification settings - Fork 9.1k
/
Copy pathmachine_learning_basics.tex
1979 lines (1636 loc) · 140 KB
/
machine_learning_basics.tex
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
% !Mode:: "TeX:UTF-8"
% Translator: Yujun Li
\chapter{\glsentrytext{ML}基础}
\label{chap:machine_learning_basics}
\gls{DL}是\gls{ML}的一个特定分支。
我们要想充分理解\gls{DL},必须对\gls{ML}的基本原理有深刻的理解。
本章将探讨贯穿本书其余部分的一些\gls{ML}重要原理。
我们建议新手读者或是希望更全面了解的读者参考一些更全面覆盖基础知识的\gls{ML}参考书,例如~\cite{MurphyBook2012}或者~\cite{bishop-book2006}。
如果你已经熟知\gls{ML},可以跳过前面的部分,前往\secref{sec:challenges_motivating_deep_learning}。
\secref{sec:challenges_motivating_deep_learning}涵盖了一些传统\gls{ML}技术观点,这些技术对\gls{DL}的发展有着深远影响。
首先,我们将介绍学习算法的定义,并介绍一个简单的示例:\gls{linear_regression}算法。
接下来,我们会探讨拟合训练数据与寻找能够泛化到新数据的模式存在哪些不同的挑战。
大部分\gls{ML}算法都有\emph{超参数}(必须在学习算法外设定);我们将探讨如何使用额外的数据设置超参数。
\gls{ML}本质上属于应用统计学,更多地关注于如何用计算机统计地估计复杂函数,不太关注为这些函数提供置信区间;因此我们会探讨两种统计学的主要方法:频率派估计和\gls{bayesian_inference}。
大部分\gls{ML}算法可以分成\gls{supervised_learning}和\gls{unsupervised_learning}两类;我们将探讨不同的分类,并为每类提供一些简单的\gls{ML}算法作为示例。
大部分\gls{DL}算法都是基于被称为\gls{SGD}的算法求解的。
我们将介绍如何组合不同的算法部分,例如优化算法、\gls{cost_function}、模型和\gls{dataset},来建立一个\gls{ML}算法。
最后在\secref{sec:challenges_motivating_deep_learning},我们会介绍一些限制传统\gls{ML}泛化能力的因素。
这些挑战促进了解决这些问题的\gls{DL}算法的发展。
% -- 95 --
\section{学习算法}
\label{sec:learning_algorithms}
\gls{ML}算法是一种能够从数据中学习的算法。
然而,我们所谓的``学习''是什么意思呢?
\cite{Mitchell:1997:ML}提供了一个简洁的定义:``对于某类任务$T$和\gls{performance_measures} $P$,一个计算机程序被认为可以从\gls{experience} $E$中学习是指,通过\gls{experience} $E$改进后,它在任务$T$上由\gls{performance_measures} $P$衡量的性能有所提升。''
\gls{experience} $E$,任务$T$和\gls{performance_measures} $P$的定义范围非常宽广,在本书中我们并不会试图去解释这些定义的具体意义。
相反,我们会在接下来的章节中提供直观的解释和示例来介绍不同的任务、\gls{performance_measures}和\gls{experience},这些将被用来构建\gls{ML}算法。
\subsection{任务 $T$}
\label{sec:the_task_t}
\gls{ML}可以让我们解决一些人为设计和使用确定性程序很难解决的问题。
从科学和哲学的角度来看,\gls{ML}受到关注是因为提高我们对\gls{ML}的认识需要提高我们对智能背后原理的理解。
从``任务''的相对正式的定义上说,学习过程本身不能算是任务。
学习是我们所谓的获取完成任务的能力。
例如,我们的目标是使机器人能够行走,那么行走便是任务。
我们可以编程让机器人学会如何行走,或者可以人工编写特定的指令来指导机器人如何行走。
通常\gls{ML}任务定义为\gls{ML}系统应该如何处理\firstgls{example:chap5}。
\gls{example:chap5}是指我们从某些希望\gls{ML}系统处理的对象或事件中收集到的已经量化的\firstgls{feature}的集合。
我们通常会将\gls{example:chap5}表示成一个向量$\Vx\in\SetR^n$,其中向量的每一个元素$x_i$是一个\gls{feature}。
例如,一张图片的\gls{feature}通常是指这张图片的像素值。
% -- 96 --
\gls{ML}可以解决很多类型的任务。
一些非常常见的\gls{ML}任务列举如下:
\begin{itemize}
\item \textbf{分类}:
在这类任务中,计算机程序需要指定某些输入属于$k$类中的哪一类。
为了完成这个任务,学习算法通常会返回一个函数$f:\SetR^n \to \{1,\dots,k\}$。
当$y=f(\Vx)$时,模型将向量$\Vx$所代表的输入分类到数字码$y$所代表的类别。
还有一些其他的分类问题,例如,$f$输出的是不同类别的概率分布。
分类任务中有一个任务是对象识别,其中输入是图片(通常由一组像素亮度值表示),输出是表示图片物体的数字码。
例如,Willow Garage PR2机器人能像服务员一样识别不同饮料,并送给点餐的顾客\citep{Goodfellow2010}。
目前,最好的对象识别工作正是基于\gls{DL}的\citep{Krizhevsky-2012-small,Ioffe+Szegedy-2015}。
对象识别同时也是计算机识别人脸的基本技术,可用于标记相片合辑中的人脸\citep{Taigman-et-al-CVPR2014},有助于计算机更自然地与用户交互。
\item \textbf{输入缺失分类}:
当输入向量的每个度量不被保证的时候,分类问题将会变得更有挑战性。
为了解决分类任务,学习算法只需要定义\emph{一个}从输入向量映射到输出类别的函数。
当一些输入可能丢失时,学习算法必须学习\emph{一组}函数,而不是单个分类函数。
每个函数对应着分类具有不同缺失输入子集的$\Vx$。
这种情况在医疗诊断中经常出现,因为很多类型的医学测试是昂贵的,对身体有害的。
有效地定义这样一个大集合函数的方法是学习所有相关变量的概率分布,然后通过边缘化缺失变量来解决分类任务。
使用$n$个输入变量,我们现在可以获得每个可能的缺失输入集合所需的所有$2^n$个不同的分类函数,但是计算机程序仅需要学习一个描述联合概率分布的函数。
参见~\cite{Goodfellow-et-al-NIPS2013}了解以这种方式将深度概率模型应用于这类任务的示例。
本节中描述的许多其他任务也可以推广到缺失输入的情况; 缺失输入分类只是\gls{ML}能够解决的问题的一个示例。
% -- 97 --
\item \textbf{回归}:在这类任务中,计算机程序需要对给定输入预测数值。
为了解决这个任务,学习算法需要输出函数$f:\SetR^n \to \SetR$。
除了返回结果的形式不一样外,这类问题和分类问题是很像的。
这类任务的一个示例是预测投保人的索赔金额(用于设置保险费),或者预测证券未来的价格。
这类预测也用在算法交易中。
\item \textbf{\gls{transcribe}}:
这类任务中,\gls{ML}系统观测一些相对非结构化表示的数据,并\gls{transcribe}信息为离散的文本形式。
例如,光学字符识别要求计算机程序根据文本图片返回文字序列(ASCII码或者Unicode码)。
谷歌街景以这种方式使用\gls{DL}处理街道编号\citep{Goodfellow+et+al-ICLR2014a}。
另一个例子是语音识别,计算机程序输入一段音频波形,输出一序列音频记录中所说的字符或单词ID的编码。
\gls{DL}是现代语音识别系统的重要组成部分,被各大公司广泛使用,包括微软,IBM和谷歌\citep{deepSpeechReviewSPM2012}。
\item \textbf{机器翻译}:在机器翻译任务中,输入是一种语言的符号序列,计算机程序必须将其转化成另一种语言的符号序列。
这通常适用于自然语言,如将英语译成法语。
最近,\gls{DL}已经开始在这个任务上产生重要影响\citep{Sutskever-et-al-NIPS2014,Bahdanau-et-al-ICLR2015-small}。
\item \textbf{结构化输出}:结构化输出任务的输出是向量或者其他包含多个值的数据结构,并且构成输出的这些不同元素间具有重要关系。
这是一个很大的范畴,包括上述\gls{transcribe}任务和翻译任务在内的很多其他任务。
例如语法分析——映射自然语言句子到语法结构树,并标记树的节点为动词、名词、副词等等。
参考~\cite{Collobert-AISTATS2011}将\gls{DL}应用到语法分析的示例。
另一个例子是图像的像素级分割,将每一个像素分配到特定类别。
例如,\gls{DL}可用于标注航拍照片中的道路位置\citep{MnihHinton2010}。
在这些标注型的任务中,输出的结构形式不需要和输入尽可能相似。
例如,在为图片添加描述的任务中,计算机程序观察到一幅图,输出描述这幅图的自然语言句子\citep{Kiros-et-al-ICML2014,Kiros-et-al-arxiv2014,Mao-et-al-2014,Vinyals-et-al-CVPR2015,Donahue-et-al-arxiv2014,Karpathy+Li-CVPR2015,Fang-et-al-CVPR2015,Xu-et-al-ICML2015}。
这类任务被称为\emph{结构化输出任务}是因为输出值之间内部紧密相关。
例如,为图片添加标题的程序输出的单词必须组合成一个通顺的句子。
% -- 98 --
\item \textbf{异常检测}:在这类任务中,计算机程序在一组事件或对象中筛选,并标记不正常或非典型的个体。
异常检测任务的一个示例是信用卡欺诈检测。
通过对你的购买习惯建模,信用卡公司可以检测到你的卡是否被滥用。
如果窃贼窃取你的信用卡或信用卡信息,窃贼采购物品的分布通常和你的不同。
当该卡发生了不正常的购买行为时,信用卡公司可以尽快冻结该卡以防欺诈。
参考~\cite{chandola2009anomaly}了解欺诈检测方法。
\item \textbf{合成和采样}:在这类任务中,\gls{ML}程序生成一些和训练数据相似的新\gls{example:chap5}。
通过\gls{ML},合成和采样可能在媒体应用中非常有用,可以避免艺术家大量昂贵或者乏味费时的手动工作。
例如,视频游戏可以自动生成大型物体或风景的纹理,而不是让艺术家手动标记每个像素\citep{Luo+al-AISTATS2013-small}。
在某些情况下,我们希望采样或合成过程可以根据给定的输入生成一些特定类型的输出。
例如,在语音合成任务中,我们提供书写的句子,要求程序输出这个句子语音的音频波形。
这是一类\emph{结构化输出任务},但是多了每个输入并非只有一个正确输出的条件,并且我们明确希望输出有很多变化,这可以使结果看上去更加自然和真实。
\item \textbf{缺失值填补}:在这类任务中,\gls{ML}算法给定一个新\gls{example:chap5} $\Vx\in\SetR^n$,$\Vx$中某些元素$x_i$缺失。
算法必须填补这些缺失值。
% -- 99 --
\item \textbf{\gls{denoising}}:在这类任务中,\gls{ML}算法的输入是,\emph{干净\gls{example:chap5}}~$\Vx \in \SetR^n$经过未知损坏过程后得到的\emph{损坏\gls{example:chap5}}~$\tilde{\Vx} \in \SetR^n$。
算法根据损坏后的\gls{example:chap5} $\tilde{\Vx}$预测干净的\gls{example:chap5} $\Vx$,或者更一般地预测条件概率分布$p(\Vx\mid\tilde{\Vx})$。
\item \textbf{密度估计}或\textbf{\gls{PMF}估计}:在密度估计问题中,\gls{ML}算法学习函数$p_{\text{model}}:\SetR^n \to \SetR$,其中$p_{\text{model}}(\Vx)$可以解释成\gls{example:chap5}采样空间的概率密度函数(如果$\RVx$是连续的)或者\gls{PMF}(如果$\RVx$是离散的)。
要做好这样的任务(当我们讨论\gls{performance_measures} $P$时,我们会明确定义任务是什么),算法需要学习观测到的数据的结构。
算法必须知道什么情况下\gls{example:chap5}聚集出现,什么情况下不太可能出现。
以上描述的大多数任务都要求学习算法至少能隐式地捕获概率分布的结构。
密度估计可以让我们显式地捕获该分布。
原则上,我们可以在该分布上计算以便解决其他任务。
例如,如果我们通过密度估计得到了概率分布$p(\Vx)$,我们可以用该分布解决缺失值填补任务。
如果$x_i$的值是缺失的,但是其他的变量值$\Vx_{-i}$已知,那么我们可以得到条件概率分布$p(x_i\mid\Vx_{-i})$。
实际情况中,密度估计并不能够解决所有这类问题,因为在很多情况下$p(\Vx)$是难以计算的。
\end{itemize}
当然,还有很多其他同类型或其他类型的任务。
这里我们列举的任务类型只是用来介绍\gls{ML}可以做哪些任务,并非严格地定义\gls{ML}任务分类。
\subsection{\glsentrytext{performance_measures} $P$}
\label{sec:the_performance_measure_p}
为了评估\gls{ML}算法的能力,我们必须设计其性能的定量度量。
通常\gls{performance_measures} $P$是特定于系统执行的任务$T$而言的。
对于诸如分类、缺失输入分类和\gls{transcribe}任务,我们通常度量模型的\firstgls{accuracy}。
\gls{accuracy}是指该模型输出正确结果的\gls{example:chap5}比率。
我们也可以通过\firstgls{error_rate}得到相同的信息。
\gls{error_rate}是指该模型输出错误结果的\gls{example:chap5}比率。
我们通常把\gls{error_rate}称为$0-1$\gls{loss}的期望。
在一个特定的\gls{example:chap5}上,如果结果是对的,那么$0-1$\gls{loss}是$0$;否则是$1$。
但是对于密度估计这类任务而言,度量准确率,错误率或者其他类型的$0-1$\gls{loss}是没有意义的。
反之,我们必须使用不同的性能度量,使模型对每个\gls{example:chap5}都输出一个连续数值的得分。
最常用的方法是输出模型在一些\gls{example:chap5}上概率对数的平均值。
% -- 100 --
通常,我们会更加关注\gls{ML}算法在未观测数据上的性能如何,因为这将决定其在实际应用中的性能。
因此,我们使用\firstgls{test_set}数据来评估系统性能,将其与训练机器学习系统的训练集数据分开。
\gls{performance_measures}的选择或许看上去简单且客观,但是选择一个与系统理想表现对应的\gls{performance_measures}通常是很难的。
在某些情况下,这是因为很难确定应该度量什么。
例如,在执行\gls{transcribe}任务时,我们是应该度量系统\gls{transcribe}整个序列的准确率,还是应该用一个更细粒度的指标,对序列中正确的部分元素以正面评价?
在执行回归任务时,我们应该更多地惩罚频繁犯一些中等错误的系统,还是较少犯错但是犯很大错误的系统?
这些设计的选择取决于应用。
还有一些情况,我们知道应该度量哪些数值,但是度量它们不太现实。
这种情况经常出现在密度估计中。
很多最好的概率模型只能隐式地表示概率分布。
在许多这类模型中,计算空间中特定点的概率是不可行的。
在这些情况下,我们必须设计一个仍然对应于设计对象的替代标准,或者设计一个理想标准的良好近似。
\subsection{\glsentrytext{experience} $E$}
\label{sec:the_experience_e}
根据学习过程中的不同\gls{experience},\gls{ML}算法可以大致分类为\firstgls{unsupervised}算法和\firstgls{supervised}算法。
本书中的大部分学习算法可以被理解为在整个\firstgls{dataset}上获取\gls{experience}。
\gls{dataset}是指很多\gls{example:chap5}组成的集合,如\secref{sec:the_task_t}所定义的。
有时我们也将\gls{example:chap5}称为\firstgls{data_points}。
% -- 101 --
Iris(鸢尾花卉)\gls{dataset}~\citep{Fisher-1936}是统计学家和\gls{ML}研究者使用了很久的\gls{dataset}。
它是$150$个鸢尾花卉植物不同部分测量结果的集合。
每个单独的植物对应一个\gls{example:chap5}。
每个\gls{example:chap5}的\gls{feature}是该植物不同部分的测量结果:萼片长度、萼片宽度、花瓣长度和花瓣宽度。
这个\gls{dataset}也记录了每个植物属于什么品种,其中共有三个不同的品种。
\firstgls{unsupervised_learning_algorithm}训练含有很多\gls{feature}的\gls{dataset},然后学习出这个\gls{dataset}上有用的结构性质。
在\gls{DL}中,我们通常要学习生成\gls{dataset}的整个概率分布,显式地,比如密度估计,或是隐式地,比如合成或\gls{denoising}。
还有一些其他类型的\gls{unsupervised_learning}任务,例如聚类,将\gls{dataset}分成相似\gls{example:chap5}的集合。
\firstgls{supervised_learning_algorithm}训练含有很多\gls{feature}的\gls{dataset},不过\gls{dataset}中的\gls{example:chap5}都有一个\firstgls{label}或\firstgls{target}。
例如,Iris~\gls{dataset}注明了每个鸢尾花卉\gls{example:chap5}属于什么品种。
\gls{supervised_learning}算法通过研究Iris~\gls{dataset},学习如何根据测量结果将\gls{example:chap5}划分为三个不同品种。
大致说来,\gls{unsupervised_learning}涉及到观察随机向量$\RVx$的好几个\gls{example:chap5},试图显式或隐式地学习出概率分布$p(\RVx)$,或者是该分布一些有意思的性质;
而\gls{supervised_learning}包含观察随机向量$\RVx$及其相关联的值或向量$\RVy$,然后从$\RVx$预测$\RVy$,通常是估计$p(\RVy\mid\RVx)$。
术语\firstgls{supervised_learning}源自这样一个视角,教员或者老师提供\gls{target} $\RVy$给\gls{ML}系统,指导其应该做什么。
在\gls{unsupervised_learning}中,没有教员或者老师,算法必须学会在没有指导的情况下理解数据。
\gls{unsupervised_learning}和\gls{supervised_learning}不是严格定义的术语。
它们之间界线通常是模糊的。
很多\gls{ML}技术可以用于这两个任务。
例如,概率的链式法则表明对于向量$\RVx\in\SetR^n$,联合分布可以分解成
\begin{equation}
p(\RVx) = \prod_{i=1}^n p(\RSx_i \mid \RSx_1,\dots,\RSx_{i-1}) .
\end{equation}
该分解意味着我们可以将其拆分成$n$个\gls{supervised_learning}问题,来解决表面上的\gls{unsupervised_learning} $p(\Vx)$。
另外,我们求解\gls{supervised_learning}问题$p(y\mid\RVx)$时,也可以使用传统的\gls{unsupervised_learning}策略学习联合分布$p(\RVx,y)$,然后推断
\begin{equation}
p(y\mid\RVx) = \frac{p(\RVx,y)}{\sum_{y'}p(\RVx,y')}.
\end{equation}
尽管\gls{unsupervised_learning}和\gls{supervised_learning}并非完全没有交集的正式概念,它们确实有助于粗略分类我们研究\gls{ML}算法时遇到的问题。
传统地,人们将回归、分类或者结构化输出问题称为\gls{supervised_learning}。
支持其他任务的密度估计通常被称为\gls{unsupervised_learning}。
% -- 102 --
学习范式的其他变种也是有可能的。
例如,半监督学习中,一些\gls{example:chap5}有监督\gls{target},但其他\gls{example:chap5}没有。
在多实例学习中,\gls{example:chap5}的整个集合被标记为含有或者不含有该类的\gls{example:chap5},但是集合中单独的样本是没有标记的。
参考~\cite{Kotzias2015}了解最近\gls{deep_model}进行多实例学习的示例。
有些\gls{ML}算法并不是训练于一个固定的\gls{dataset}上。
例如,\firstgls{reinforcement_learning}算法会和环境进行交互,所以学习系统和它的训练过程会有反馈回路。
这类算法超出了本书的范畴。
请参考~\cite{Sutton+Barto-98}或~\cite{Bertsekas+Tsitsiklis-book1996}了解强化学习相关知识,\citet{Deepmind-atari-arxiv2013}介绍了强化学习方向的\gls{DL}方法。
大部分\gls{ML}算法简单地训练于一个\gls{dataset}上。
\gls{dataset}可以用很多不同方式来表示。
在所有的情况下,\gls{dataset}都是\gls{example:chap5}的集合,而\gls{example:chap5}是\gls{feature}的集合。
表示\gls{dataset}的常用方法是\firstgls{design_matrix}。
\gls{design_matrix}的每一行包含一个不同的\gls{example:chap5}。
每一列对应不同的\gls{feature}。
例如,Iris~\gls{dataset}包含$150$个\gls{example:chap5},每个\gls{example:chap5}有4个\gls{feature}。
这意味着我们可以将该\gls{dataset}表示为\gls{design_matrix} $\MX\in\SetR^{150\times 4}$,其中$X_{i,1}$表示第$i$个植物的萼片长度,$X_{i,2}$表示第$i$个植物的萼片宽度等等。
我们在本书中描述的大部分学习算法都是讲述它们是如何运行在\gls{design_matrix}\gls{dataset}上的。
当然,每一个\gls{example:chap5}都能表示成向量,并且这些向量的维度相同,才能将一个\gls{dataset}表示成\gls{design_matrix}。
这一点并非永远可能。
例如,你有不同宽度和高度的照片的集合,那么不同的照片将会包含不同数量的像素。
因此不是所有的照片都可以表示成相同长度的向量。
\secref{sec:data_types}和\chapref{chap:sequence_modeling_recurrent_and_recursive_nets}将会介绍如何处理这些不同类型的异构数据。
在上述这类情况下,我们不会将\gls{dataset}表示成$m$行的矩阵,而是表示成$m$个元素的结合:$\{\Vx^{(1)},\Vx^{(2)},\dots,\Vx^{(m)}\}$。
这种表示方式意味着\gls{example:chap5}向量$\Vx^{(i)}$和$\Vx^{(j)}$可以有不同的大小。
% -- 103 --
在\gls{supervised_learning}中,\gls{example:chap5}包含一个\gls{label}或\gls{target}和一组\gls{feature}。
例如,我们希望使用学习算法从照片中识别对象。
我们需要明确哪些对象会出现在每张照片中。
我们或许会用数字编码表示,如$0$表示人、$1$表示车、$2$表示猫等等。
通常在处理包含观测\gls{feature}的\gls{design_matrix} $\MX$的\gls{dataset}时,我们也会提供一个\gls{label}向量$\Vy$,其中$y_i$表示\gls{example:chap5} $i$的\gls{label}。
当然,有时\gls{label}可能不止一个数。
例如,如果我们想要训练语音模型\gls{transcribe}整个句子,那么每个句子\gls{example:chap5}的\gls{label}是一个单词序列。
正如\gls{supervised_learning}和\gls{unsupervised_learning}没有正式的定义,\gls{dataset}或者\gls{experience}也没有严格的区分。
这里介绍的结构涵盖了大多数情况,但始终有可能为新的应用设计出新的结构。
\subsection{示例:\glsentrytext{linear_regression}}
\label{sec:example_linear_regression}
我们将\gls{ML}算法定义为,通过经验以提高计算机程序在某些任务上性能的算法。
这个定义有点抽象。
为了使这个定义更具体点,我们展示一个简单的\gls{ML}示例:\firstgls{linear_regression}。
当我们介绍更多有助于理解\gls{ML}特性的概念时,我们会反复回顾这个示例。
顾名思义,\gls{linear_regression}解决回归问题。
换言之,我们的目标是建立一个系统,将向量$\Vx\in\SetR^n$作为输入,预测标量$y\in\SetR$作为输出。
\gls{linear_regression}的输出是其输入的线性函数。
令$\hat{y}$表示模型预测$y$应该取的值。
我们定义输出为
\begin{equation}
\hat{y} = \Vw^\Tsp \Vx ,
\end{equation}
其中$\Vw\in\SetR^n$是\firstgls{parameters}向量。
\gls{parameters}是控制系统行为的值。
在这种情况下,$w_i$是系数,会和\gls{feature} $x_i$相乘之后全部相加起来。
我们可以将$\Vw$看作是一组决定每个\gls{feature}如何影响预测的\firstgls{weights}。
如果\gls{feature} $x_i$对应的权重$w_i$是正的,那么\gls{feature}的值增加,我们的预测值$\hat{y}$也会增加。
如果\gls{feature} $x_i$对应的权重$w_i$是负的,那么\gls{feature}的值增加,我们的预测值$\hat{y}$会减少。
如果\gls{feature}权重的大小很大,那么它对预测有很大的影响;如果\gls{feature}权重的大小是零,那么它对预测没有影响。
% -- 104 --
因此,我们可以定义任务$T$:通过输出$\hat{y} = \Vw^\Tsp \Vx$从$\Vx$预测$y$。
接下来我们需要定义\gls{performance_measures}——$P$。
假设我们有$m$个输入\gls{example:chap5}组成的\gls{design_matrix},我们不用它来训练模型,而是评估模型性能如何。
我们也有每个\gls{example:chap5}对应的正确值$y$组成的回归\gls{target}向量。
因为这个\gls{dataset}只是用来评估性能,我们称之为\firstgls{test_set}。
我们将输入的\gls{design_matrix}记作$\MX^{\text{(test)}}$,回归\gls{target}向量记作$\Vy^{(\text{test})}$。
度量模型性能的一种方法是计算模型在\gls{test_set}上的\firstgls{mean_squared_error}。
如果$\hat{\Vy}^{(\text{test})}$表示模型在\gls{test_set}上的预测值,那么\gls{mean_squared_error}表示为:
\begin{equation}
\text{MSE}_{\text{test}} = \frac{1}{m} \sum_i ( \hat{\Vy}^{(\text{test})} - \Vy^{(\text{test})})_i^2.
\end{equation}
直观上,当$\hat{\Vy}^{(\text{test})} = \Vy^{(\text{test})}$时,我们会发现误差降为$0$。
我们也可以看到
\begin{equation}
\text{MSE}_{\text{test}} = \frac{1}{m} \norm{ \hat{\Vy}^{(\text{test})} - \Vy^{(\text{test})}}_2^2,
\end{equation}
所以当预测值和\gls{target}值之间的欧几里得距离增加时,误差也会增加。
为了构建一个\gls{ML}算法,我们需要设计一个算法,通过观察训练集$(\MX^{(\text{train})},\Vy^{(\text{train})})$获得\gls{experience},减少$\text{MSE}_{\text{test}}$以改进权重$\Vw$。
一种直观方式(我们将在后续的\secref{sec:conditional_log_likelihood_and_mean_squared_error}说明其合法性)是最小化训练集上的\gls{mean_squared_error},即$\text{MSE}_{\text{train}}$。
最小化$\text{MSE}_{\text{train}}$,我们可以简单地求解其导数为$\mathbf{0}$的情况:
\begin{equation}
\nabla_{\Vw} \text{MSE}_{\text{train}} = 0
\end{equation}
\begin{equation}
\Rightarrow \nabla_{\Vw} \frac{1}{m} \norm{ \hat{\Vy}^{(\text{train})} - \Vy^{(\text{train})}}_2^2 = 0
\end{equation}
\begin{equation}
\Rightarrow \frac{1}{m} \nabla_{\Vw} \norm{ \MX^{(\text{train})}\Vw - \Vy^{(\text{train})}}_2^2 = 0
\end{equation}
\begin{equation}
\Rightarrow \nabla_{\Vw} \left( \MX^{(\text{train})}\Vw - \Vy^{(\text{train})} \right)^\Tsp \left( \MX^{(\text{train})}\Vw - \Vy^{(\text{train})} \right) = 0
\end{equation}
\begin{equation}
\Rightarrow \nabla_{\Vw} \left(
\Vw^\Tsp \MX^{(\text{train})\Tsp}\MX^{(\text{train})}\Vw - 2\Vw^\Tsp\MX^{(\text{train})\Tsp} \Vy^{(\text{train})} + \Vy^{(\text{train})\Tsp}\Vy^{(\text{train})}
\right) = 0
\end{equation}
\begin{equation}
\Rightarrow 2\MX^{(\text{train})\Tsp}\MX^{(\text{train})} \Vw -
2\MX^{(\text{train})\Tsp} \Vy^{(\text{train})} = 0
\end{equation}
\begin{equation}
\label{eq:5.12}
\Rightarrow \Vw = \left(\MX^{(\text{train})\Tsp}\MX^{(\text{train})}
\right)^{-1} \MX^{(\text{train})\Tsp} \Vy^{(\text{train})}
\end{equation}
% -- 105 --
通过\eqnref{eq:5.12}给出解的系统方程被称为\firstgls{normal_equations}。
计算\eqnref{eq:5.12}构成了一个简单的机器学习算法。
\figref{fig:chap5_linreg}展示了\gls{linear_regression}算法的使用示例。
\begin{figure}[!htb]
\ifOpenSource
\centerline{\includegraphics{figure.pdf}}
\else
\centerline{\includegraphics{Chapter5/figures/linreg_color}}
\fi
\caption{一个\gls{linear_regression}问题,其中训练集包括十个数据点,每个数据点包含一个特征。因为只有一个特征,权重向量$\Vw$也只有一个要学习的参数$w_1$。\emph{(左)}我们可以观察到\gls{linear_regression}学习$w_1$,从而使得直线$y=w_1x$能够尽量接近穿过所有的训练点。\emph{(右)}标注的点表示由\gls{normal_equations}学习到的$w_1$的值,我们发现它可以最小化训练集上的\gls{mean_squared_error}。}
\label{fig:chap5_linreg}
\end{figure}
值得注意的是,术语\firstgls{linear_regression}通常用来指稍微复杂一些,附加额外参数(截距项$b$)的模型。
在这个模型中,
\begin{equation}
\hat{y} = \Vw^\Tsp \Vx + b,
\end{equation}
因此从参数到预测的映射仍是一个线性函数,而从\gls{feature}到预测的映射是一个仿射函数。
如此扩展到仿射函数意味着模型预测的曲线仍然看起来像是一条直线,只是这条直线没必要经过原点。
除了通过添加偏置参数$b$,我们还可以使用仅含权重的模型,但是$\Vx$需要增加一项永远为$1$的元素。
对应于额外$1$的权重起到了偏置参数的作用。
当我们在本书中提到仿射函数时,我们会经常使用术语``线性''。
% -- 106 --
截距项$b$通常被称为仿射变换的\,\textbf{\gls{bias_aff}}(bias)参数。
这个术语的命名源自该变换的输出在没有任何输入时会偏移$b$。
它和统计偏差中指代统计估计算法的某个量的期望估计偏离真实值的意思是不一样的。
\gls{linear_regression}当然是一个极其简单且有局限的学习算法,但是它提供了一个说明学习算法如何工作的例子。
在接下来的小节中,我们将会介绍一些设计学习算法的基本原则,并说明如何使用这些原则来构建更复杂的学习算法。
\section{\glsentrytext{capacity}、\glsentrytext{overfitting}和\glsentrytext{underfitting}}
\label{sec:capacity_overfitting_and_underfitting}
\gls{ML}的主要挑战是我们的算法必须能够在\emph{先前未观测的新}输入上表现良好,而不只是在训练集上表现良好。 %?? space in book
在先前未观测到的输入上表现良好的能力被称为\firstgls{generalization}。
通常情况下,当我们训练\gls{ML}模型时,我们可以使用某个训练集,在训练集上计算一些被称为\firstgls{training_error}的度量误差,目标是降低训练误差。
目前为止,我们讨论的是一个简单的优化问题。
\gls{ML}和优化不同的地方在于,我们也希望\firstgls{generalization_error}(也被称为\firstgls{test_error})很低。
泛化误差被定义为新输入的误差期望。
这里,期望的计算基于不同的可能输入,这些输入采自于系统在现实中遇到的分布。
通常,我们度量模型在训练集中分出来的\firstgls{test_set}\gls{example:chap5}上的性能,来评估\gls{ML}模型的泛化误差。
在我们的\gls{linear_regression}示例中,我们通过最小化\gls{training_error}来训练模型,
\begin{equation}
\frac{1}{m^{(\text{train})}} \norm{\MX^{(\text{train})}\Vw - \Vy^{(\text{train})}}_2^2,
\end{equation}
但是我们真正关注的是\gls{test_error}~$\frac{1}{m^{(\text{test})}} \norm{\MX^{(\text{test})}\Vw - \Vy^{(\text{test})}}_2^2$。
% -- 107 --
当我们只能观测到训练集时,我们如何才能影响\gls{test_set}的性能呢?
\firstgls{SLT}提供了一些答案。
如果训练集和\gls{test_set}的数据是任意收集的,那么我们能够做的确实很有限。
如果我们可以对\gls{training_set}和\gls{test_set}数据的收集方式有些假设,那么我们能够对算法做些改进。
\gls{training_set}和\gls{test_set}数据通过\gls{dataset}上被称为\firstgls{DGP}的概率分布生成。
通常,我们会做一系列被统称为\firstgls{iid}的假设。
该假设是说,每个\gls{dataset}中的\gls{example:chap5}都是彼此\firstgls{independent},并且\gls{training_set}和\gls{test_set}是\firstgls{id},采样自相同的分布。
这个假设使我们能够在单个样本的概率分布描述数据生成过程。
然后相同的分布可以用来生成每一个训练\gls{example:chap5}和每一个测试\gls{example:chap5}。
我们将这个共享的潜在分布称为\firstgls{DGD},记作$p_{\text{data}}$。
这个概率框架和独立同分布假设允许我们从数学上研究\gls{training_error}和\gls{test_error}之间的关系。
我们能观察到\gls{training_error}和\gls{test_error}之间的直接联系是,随机模型\gls{training_error}的期望和该模型\gls{test_error}的期望是一样的。
假设我们有概率分布$p(\Vx,y)$,从中重复采样生成\gls{training_set}和\gls{test_set}。
对于某个固定的$\Vw$,\gls{training_set}误差的期望恰好和\gls{test_set}误差的期望一样,这是因为这两个期望的计算都使用了相同的数据集生成过程。
这两种情况的唯一区别是\gls{dataset}的名字不同。
当然,当我们使用\gls{ML}算法时,我们不会提前固定参数,然后采样得到两个\gls{dataset}。
我们采样得到训练集,然后挑选参数去降低训练集误差,然后采样得到\gls{test_set}。
在这个过程中,测试误差期望会大于或等于训练误差期望。
以下是决定\gls{ML}算法效果是否好的因素:
\begin{enumerate}
\item 降低训练误差。
\item 缩小训练误差和测试误差的差距。
\end{enumerate}
这两个因素对应\gls{ML}的两个主要挑战:\firstgls{underfitting}和\firstgls{overfitting}。
\gls{underfitting}是指模型不能在训练集上获得足够低的误差。
而\gls{overfitting}是指训练误差和和测试误差之间的差距太大。
% -- 108 --
通过调整模型的\firstgls{capacity},我们可以控制模型是否偏向于\gls{overfitting}或者\gls{underfitting}。
通俗地,模型的\gls{capacity}是指其拟合各种函数的能力。
\gls{capacity}低的模型可能很难拟合训练集。
\gls{capacity}高的模型可能会过拟合,因为记住了不适用于\gls{test_set}的\gls{training_set}性质。
一种控制训练算法容量的方法是选择\firstgls{hypothesis_space},即学习算法可以选择为解决方案的函数集。
例如,\gls{linear_regression}算法将关于其输入的所有线性函数作为假设空间。
广义\gls{linear_regression}的假设空间包括多项式函数,而非仅有线性函数。
这样做就增加了模型的容量。
一次多项式提供了我们已经熟悉的\gls{linear_regression}模型,其预测如下:
\begin{equation}
\hat{y} = b + wx.
\end{equation}
通过引入$x^2$作为\gls{linear_regression}模型的另一个\gls{feature},我们能够学习关于$x$的二次函数模型:
\begin{equation}
\hat{y} = b + w_1x + w_2x^2.
\end{equation}
尽管该模型是\emph{输入}的二次函数,但输出仍是\emph{参数}的线性函数。
因此我们仍然可以用\gls{normal_equations}得到模型的闭解。
我们可以继续添加$x$的更高幂作为额外\gls{feature},例如下面的$9$次多项式:
\begin{equation}
\hat{y} = b + \sum_{i=1}^9 w_i x^i.
\end{equation}
当\gls{ML}算法的\gls{capacity}适合于所执行任务的复杂度和所提供训练数据的数量时,算法效果通常会最佳。
\gls{capacity}不足的模型不能解决复杂任务。
\gls{capacity}高的模型能够解决复杂的任务,但是当其容量高于任务所需时,有可能会过拟合。
\figref{fig:chap5_underfit_just_right_overfit}展示了这个原理的使用情况。
我们比较了线性,二次和$9$次预测器拟合真实二次函数的效果。
线性函数无法刻画真实函数的曲率,所以欠拟合。
$9$次函数能够表示正确的函数,但是因为训练参数比训练\gls{example:chap5}还多,所以它也能够表示无限多个刚好穿越训练\gls{example:chap5}点的很多其他函数。
我们不太可能从这很多不同的解中选出一个泛化良好的。
在这个问题中,二次模型非常符合任务的真实结构,因此它可以很好地泛化到新数据上。
\begin{figure}[!htb]
\ifOpenSource
\centerline{\includegraphics{figure.pdf}}
\else
\centerline{\includegraphics{Chapter5/figures/underfit_just_right_overfit_color}}
\fi
\caption{我们用三个模型拟合了这个训练集的样本。训练数据是通过随机抽取$x$然后用二次函数确定性地生成$y$来合成的。\emph{(左)}用一个线性函数拟合数据会导致\gls{underfitting}——它无法捕捉数据中的\gls{curvature}信息。\emph{(中)}用二次函数拟合数据在未观察到的点上\gls{generalization}得很好。这并不会导致明显的\gls{underfitting}或者\gls{overfitting}。\emph{(右)}一个$9$阶的多项式拟合数据会导致\gls{overfitting}。在这里我们使用\,\gls{Moore}来解这个欠定的\gls{normal_equations}。得出的解能够精确地穿过所有的训练点,但可惜我们无法提取有效的结构信息。在两个数据点之间它有一个真实的函数所不包含的深谷。在数据的左侧,它也会急剧增长,而在这一区域真实的函数却是下降的。}
\label{fig:chap5_underfit_just_right_overfit}
\end{figure}
% -- 109 --
目前为止,我们探讨了通过改变输入\gls{feature}的数目和加入这些\gls{feature}对应的参数,改变模型的容量。
事实上,还有很多方法可以改变模型的容量。
容量不仅取决于模型的选择。
模型规定了调整参数降低训练目标时,学习算法可以从哪些函数族中选择函数。
这被称为模型的\firstgls{representational_capacity}。
在很多情况下,从这些函数中挑选出最优函数是非常困难的优化问题。
实际中,学习算法不会真的找到最优函数,而仅是找到一个可以大大降低训练误差的函数。
额外的限制因素,比如优化算法的不完美,意味着学习算法的\firstgls{effective_capacity}可能小于模型族的\gls{representational_capacity}。
% -- 110 --
提高\gls{ML}模型泛化的现代思想可以追溯到早在托勒密时期的哲学家的思想。
许多早期的学者提出一个简约原则,现在广泛被称为\firstgls{OR}(c. 1287-1387)。
该原则指出,在同样能够解释已知观测现象的假设中,我们应该挑选``最简单''的那一个。
这个想法是在20世纪,由统计学习理论创始人形式化并精确化的\citep{Vapnik71,Vapnik82,Blumer-et-al-1989,Vapnik95}。
统计学习理论提供了量化模型容量的不同方法。
在这些中,最有名的是\firstall{VC}。
\glssymbol{VC}\,维度量二元分类器的容量。
\glssymbol{VC}\,维定义为该分类器能够分类的训练\gls{example:chap5}的最大数目。
假设存在$m$个不同$\Vx$点的训练集,分类器可以任意地标记该$m$个不同的$\Vx$点,\glssymbol{VC}\,维被定义为$m$的最大可能值。
量化模型的容量使得统计学习理论可以进行量化预测。
统计学习理论中最重要的结论阐述了训练误差和泛化误差之间差异的上界随着模型容量增长而增长,但随着训练\gls{example:chap5}增多而下降\citep{Vapnik71,Vapnik82,Blumer-et-al-1989,Vapnik95}。
这些边界为\gls{ML}算法可以有效解决问题提供了理论验证,但是它们很少应用于实际中的\gls{DL}算法。
一部分原因是边界太松,另一部分原因是很难确定\gls{DL}算法的容量。
由于有效容量受限于优化算法的能力,确定\gls{DL}模型容量的问题特别困难。
而且对于\gls{DL}中的一般非凸优化问题,我们只有很少的理论分析。
我们必须记住虽然更简单的函数更可能泛化(训练误差和测试误差的差距小),但我们仍然需要选择一个充分复杂的假设以达到低的\gls{training_error}。
通常,当模型容量上升时,训练误差会下降,直到其渐近最小可能误差(假设误差度量有最小值)。
通常,\gls{generalization_error}是一个关于模型容量的U形曲线函数。
如\figref{fig:chap5_generalization_vs_capacity}所示。
\begin{figure}[!htb]
\ifOpenSource
\centerline{\includegraphics{figure.pdf}}
\else
\centerline{\includegraphics{Chapter5/figures/generalization_vs_capacity_color}}
\fi
\caption{\gls{capacity}和误差之间的典型关系。\gls{training_error}和\gls{test_error}表现得非常不同。在图的左端,\gls{training_error}和\gls{generalization_error}都非常高。这是\firstgls{underfit_regime}。当我们增加\gls{capacity}时,\gls{training_error}减小,但是\gls{training_error}和\gls{generalization_error}之间的间距却不断扩大。最终,这个间距的大小超过了\gls{training_error}的下降,我们进入到了\firstgls{overfit_regime},其中\gls{capacity}过大,超过了\firstgls{optimal_capacity}。}
\label{fig:chap5_generalization_vs_capacity}
\end{figure}
% -- 111 --
为考虑容量任意高的极端情况,我们介绍\firstgls{nonparametric}\emph{模型}的概念。
至此,我们只探讨过参数模型,例如\gls{linear_regression}。
参数模型学习的函数在观测到新数据前,参数向量的分量个数是有限且固定的。
非参数模型没有这些限制。
有时,非参数模型仅是一些不能实际实现的理论抽象(比如搜索所有可能概率分布的算法)。
然而,我们也可以设计一些实用的非参数模型,使它们的复杂度和训练集大小有关。
这种算法的一个示例是\firstgls{nearest_neighbor_regression}。
不像\gls{linear_regression}有固定长度的向量作为权重,\gls{nearest_neighbor_regression}模型存储了训练集中所有的$\MX$和$\Vy$。
当需要为测试点$\Vx$分类时,模型会查询训练集中离该点最近的点,并返回相关的回归\gls{target}。
换言之,$\hat{y}=y_i$其中$i=\argmin \norm{\MX_{i,:}-\Vx}_2^2$。
该算法也可以扩展成$L^2$范数以外的距离度量,例如学成距离度量\citep{RoweisNCA2005}。
在最近向量不唯一的情况下,如果允许算法对所有离$\Vx$最近的$\MX_{i,:}$关联的$y_i$求平均,那么该算法会在任意回归\gls{dataset}上达到最小可能的训练误差(如果存在两个相同的输入对应不同的输出,那么训练误差可能会大于零)。
最后,我们也可以将参数学习算法嵌入另一个增加参数数目的算法来创建非参数学习算法。
例如,我们可以想象这样一个算法,外层循环调整多项式的次数,内层循环通过\gls{linear_regression}学习模型。
% -- 112 --
理想模型假设我们能够预先知道生成数据的真实概率分布。
然而这样的模型仍然会在很多问题上发生一些错误,因为分布中仍然会有一些\gls{noise}。
在\gls{supervised_learning}中,从$\Vx$到$y$的映射可能本质上是随机的,或者$y$虽然是确定性函数,但不光受$\Vx$影响,还受$\Vx$之外的其他变量的影响。
从预先知道的真实分布$p(\Vx,y)$进行预测而出现的误差被称为\firstgls{bayes_error}。
\gls{training_error}和\gls{generalization_error}会随训练集的大小发生变化。
泛化误差的期望从不会因训练\gls{example:chap5}数目的增加而增加。
对于非参数模型而言,更多的数据会得到更好的泛化能力,直到达到最佳可能的泛化误差。
任何模型容量小于最优容量的固定参数模型会渐近到大于\gls{bayes_error}的误差值。
如\figref{fig:chap5_training_size_grows}所示。
值得注意的是,具有最优容量的模型仍然有可能在\gls{training_error}和\gls{generalization_error}之间存在很大的差距。
在这种情况下,我们可以通过收集更多的训练\gls{example:chap5}来缩小差距。
\begin{figure}[!htb]
\ifOpenSource
\centerline{\includegraphics{figure.pdf}}
\else
\centerline{\includegraphics{Chapter5/figures/training_size_grows}}
\fi
\caption{训练集大小对\gls{training_error},\gls{test_error}以及\gls{optimal_capacity}的影响。通过给一个$5$阶多项式添加适当大小的噪声,我们构造了一个合成的\gls{regression}问题,生成单个测试集,然后生成一些不同尺寸的训练集。为了描述$95\%$置信区间的\gls{error_bar},对于每一个尺寸,我们生成了$40$个不同的训练集。\emph{(上)}两个不同的模型上训练集和测试集的\,\glssymbol{mean_squared_error},一个二次模型,另一个模型的阶数通过最小化\gls{test_error}来选择。两个模型都是用闭式解来拟合。对于二次模型来说,当训练集增加时\gls{training_error}也随之增大。这是由于越大的数据集越难以拟合。同时,\gls{test_error}随之减小,因为关于训练数据的不正确的假设越来越少。二次模型的容量并不足以解决这个问题,所以它的\gls{test_error}趋近于一个较高的值。\gls{optimal_capacity}点处的\gls{test_error}趋近于\gls{bayes_error}。\gls{training_error}可以低于\gls{bayes_error},因为训练算法有能力记住训练集中特定的样本。当训练集趋向于无穷大时,任何固定容量的模型(在这里指的是二次模型)的\gls{training_error}都至少增至\gls{bayes_error}。\emph{(下)}当训练集大小增大时,\gls{optimal_capacity}(在这里是用最优多项式回归器的阶数衡量的)也会随之增大。\gls{optimal_capacity}在达到足够捕捉模型复杂度之后就不再增长了。}
\label{fig:chap5_training_size_grows}
\end{figure}
\subsection{\glsentrytext{no_free_lunch_theorem}}
\label{sec:the_no_free_lunch_theorem}
学习理论表明\gls{ML}算法能够在有限个训练集\gls{example:chap5}中很好地泛化。
这似乎违背一些基本的逻辑原则。
归纳推理,或是从一组有限的\gls{example:chap5}中推断一般的规则,在逻辑上不是很有效。
为了逻辑地推断一个规则去描述集合中的元素,我们必须具有集合中每个元素的信息。
在一定程度上,\gls{ML}仅通过概率法则就可以避免这个问题,而无需使用纯逻辑推理整个确定性法则。
\gls{ML}保证找到一个在所关注的\emph{大多数}\gls{example:chap5}上\emph{可能}正确的规则。
可惜,即使这样也不能解决整个问题。
\gls{ML}的\firstgls{no_free_lunch_theorem}表明~\citep{Wolpert-1996},在所有可能的数据生成分布上平均之后,每一个分类算法在未事先观测的点上都有相同的错误率。
换言之,在某种意义上,没有一个\gls{ML}算法总是比其他的要好。
我们能够设想的最先进的算法和简单地将所有点归为同一类的简单算法有着相同的平均性能(在所有可能的任务上)。
% -- 113 --
幸运的是,这些结论仅在我们考虑\emph{所有}可能的数据生成分布时才成立。
在真实世界应用中,如果我们对遇到的概率分布进行假设的话,那么我们可以设计在这些分布上效果良好的学习算法。
这意味着\gls{ML}研究的\gls{target}不是找一个通用学习算法或是绝对最好的学习算法。
反之,我们的\gls{target}是理解什么样的分布与人工智能获取经验的``真实世界''相关,什么样的学习算法在我们关注的数据生成分布上效果最好。
\subsection{\glsentrytext{regularization}}
\label{sec:regularization}
没有免费午餐定理暗示我们必须在特定任务上设计性能良好的\gls{ML}算法。
我们建立一组学习算法的偏好来达到这个要求。
当这些偏好和我们希望算法解决的学习问题相吻合时,性能会更好。
至此,我们具体讨论修改学习算法的方法只有,通过增加或减少学习算法可选假设空间的函数来增加或减少模型的\gls{representational_capacity}。
我们列举的一个具体示例是\gls{linear_regression}增加或减少多项式的次数。
目前为止讨论的观点都是过度简化的。
算法的效果不仅很大程度上受影响于假设空间的函数数量,也取决于这些函数的具体形式。
我们已经讨论的学习算法(\gls{linear_regression})具有包含其输入的线性函数集的假设空间。
对于输入和输出确实接近线性相关的问题,这些线性函数是很有用的。
对于完全非线性的问题它们不太有效。
例如,我们用\gls{linear_regression},从$x$预测$\sin(x)$,效果不会好。
因此我们可以通过两种方式控制算法的性能,一是允许使用的函数种类,二是这些函数的数量。
在假设空间中,相比于某一个学习算法,我们可能更偏好另一个学习算法。
这意味着两个函数都是符合条件的,但是我们更偏好其中一个。
只有非偏好函数比偏好函数在训练\gls{dataset}上效果明显好很多时,我们才会考虑非偏好函数。
% -- 115 --
例如,我们可以加入\firstgls{weight_decay}来修改\gls{linear_regression}的训练标准。
带权重衰减的\gls{linear_regression}最小化训练集上的\gls{mean_squared_error}和正则项的和$J(\Vw)$,其偏好于平方$L^2$范数较小的权重。
具体如下:
\begin{equation}
J(\Vw) = \text{MSE}_{\text{train}} + \lambda \Vw^\Tsp \Vw,
\end{equation}
其中$\lambda$是提前挑选的值,控制我们偏好小范数权重的程度。
当$\lambda =0$,我们没有任何偏好。
越大的$\lambda$越偏好范数小的权重。
最小化$J(\Vw)$可以看作是拟合训练数据和偏好小权重范数之间的权衡。
这会使得解决方案的斜率较小,或是将权重放在较少的\gls{feature}上。
我们可以训练具有不同$\lambda$值的高次多项式回归模型,来举例说明如何通过权重衰减控制模型欠拟合或过拟合的趋势。
如\figref{fig:chap5_underfit_just_right_overfit_wd_color}所示。
\begin{figure}[!htb]
\ifOpenSource
\centerline{\includegraphics{figure.pdf}}
\else
\centerline{\includegraphics{Chapter5/figures/underfit_just_right_overfit_wd_color}}
\fi
\caption{我们使用高阶多项式回归模型来拟合\figref{fig:chap5_underfit_just_right_overfit}中训练样本。真实函数是二次的,但是在这里我们只使用$9$阶多项式。我们通过改变\gls{weight_decay}的量来避免高阶模型的过拟合问题。\emph{(左)}当$\lambda$非常大时,我们可以强迫模型学习到了一个没有斜率的函数。由于它只能表示一个常数函数,所以会导致\gls{underfitting}。\emph{(中)}取一个适当的$\lambda$时,学习算法能够用一个正常的形状来恢复曲率。即使模型能够用更复杂的形状来来表示函数,\gls{weight_decay}鼓励用一个带有更小参数的更简单的模型来描述它。\emph{(右)}当\gls{weight_decay}趋近于$0$(即使用\,\gls{Moore}来解这个带有最小\gls{regularization}的欠定问题)时,这个$9$阶多项式会导致严重的\gls{overfitting},这和我们在图\ref{fig:chap5_underfit_just_right_overfit}中看到的一样。}
\label{fig:chap5_underfit_just_right_overfit_wd_color}
\end{figure}
更一般地,\gls{regularization}一个学习函数$f(\Vx;\Vtheta)$的模型,我们可以给\gls{cost_function}添加被称为\firstgls{regularizer}的惩罚。
在权重衰减的例子中,\gls{regularizer}是$\Omega(\Vw) = \Vw^\Tsp \Vw$。
在\chapref{chap:regularization_for_deep_learning},我们将看到很多其他可能的\gls{regularizer}。
% -- 116 --
表示对函数的偏好是比增减假设空间的成员函数更一般的控制模型\gls{capacity}的方法。
我们可以将去掉假设空间中的某个函数看作是对不赞成这个函数的无限偏好。
在我们权重衰减的示例中,通过在最小化的\gls{target}中额外增加一项,我们明确地表示了偏好权重较小的线性函数。
有很多其他方法隐式或显式地表示对不同解的偏好。
总而言之,这些不同的方法都被称为\firstgls{regularization}。
\emph{\gls{regularization}是指我们修改学习算法,使其降低泛化误差而非训练误差}。
\gls{regularization}是\gls{ML}领域的中心问题之一,只有优化能够与其重要性相媲。
\gls{no_free_lunch_theorem}已经清楚地阐述了没有最优的学习算法,特别地,没有最优的\gls{regularization}形式。
反之,我们必须挑选一个非常适合于我们所要解决的任务的正则形式。
\gls{DL}中普遍的(特别是本书中的)理念是大量任务(例如所有人类能做的智能任务)也许都可以使用非常通用的\gls{regularization}形式来有效解决。
\section{超参数和验证集}
\label{sec:hyperparameters_and_validation_sets}
大多数\gls{ML}算法都有超参数,可以设置来控制算法行为。
超参数的值不是通过学习算法本身学习出来的(尽管我们可以设计一个嵌套的学习过程,一个学习算法为另一个学习算法学出最优超参数)。
在\figref{fig:chap5_underfit_just_right_overfit}所示的多项式回归示例中,有一个超参数:多项式的次数,作为\textbf{\gls{capacity}}超参数。
控制\gls{weight_decay}程度的$\lambda$是另一个超参数。
有时一个选项被设为学习算法不用学习的超参数,是因为它太难优化了。
更多的情况是,该选项必须是超参数,因为它不适合在训练集上学习。
这适用于控制模型\gls{capacity}的所有超参数。
如果在训练集上学习超参数,这些超参数总是趋向于最大可能的模型容量,导致过拟合(参考\figref{fig:chap5_generalization_vs_capacity})。
例如,相比低次多项式和正的权重衰减设定,更高次的多项式和权重衰减参数设定$\lambda=0$总能在训练集上更好地拟合。
% -- 117 --
为了解决这个问题,我们需要一个训练算法观测不到的\firstgls{validation_set}\gls{example:chap5}。
早先我们讨论过和训练数据相同分布的\gls{example:chap5}组成的\gls{test_set},它可以用来估计学习过程完成之后的\gls{learner}的泛化误差。
其重点在于测试\gls{example:chap5}不能以任何形式参与到模型的选择中,包括设定超参数。
基于这个原因,\gls{test_set}中的\gls{example:chap5}不能用于验证集。
因此,我们总是从\emph{训练}数据中构建验证集。
特别地,我们将训练数据分成两个不相交的子集。
其中一个用于学习参数。
另一个作为验证集,用于估计训练中或训练后的泛化误差,更新超参数。
用于学习参数的数据子集通常仍被称为训练集,尽管这会和整个训练过程用到的更大的\gls{dataset}相混。
用于挑选超参数的数据子集被称为\firstgls{validation_set}。
通常,$80\%$的训练数据用于训练,$20\%$用于验证。
由于验证集是用来``训练''超参数的,验证集误差通常会低估泛化误差,但是一般比训练集误差低估的程度更小。
所有超参数优化完成之后,泛化误差可能会通过\gls{test_set}来估计。
在实际中,当相同的\gls{test_set}已在很多年中重复地用于评估不同算法的性能,并且考虑学术界在该\gls{test_set}上的各种尝试,我们最后可能也会对\gls{test_set}有着乐观的估计。
\gls{benchmarks}会因之变得陈旧,而不能反映系统的真实性能。
值得庆幸的是,学术界往往会移到新的(通常会更巨大、更具挑战性)基准\gls{dataset}上。
\subsection{交叉验证}
\label{sec:cross_validation}
将\gls{dataset}分成固定的训练集和固定的\gls{test_set}后,若\gls{test_set}很小,这将是有问题的。
一个小规模的\gls{test_set}意味着平均测试误差估计的统计不确定性,使得很难判断算法$A$是否比算法$B$在给定的任务上做得更好。
% -- 118 --
当\gls{dataset}有十万计或者更多的\gls{example:chap5}时,这不会是一个严重的问题。
当\gls{dataset}太小时,也有替代方法允许我们使用所有的\gls{example:chap5}估计平均测试误差,代价是增加了计算量。
这些过程是基于在原始数据上随机采样或分离出的不同\gls{dataset}上重复训练和测试的想法。
最常见的是$k$-折交叉验证过程,如\algref{alg:xv}所示,将\gls{dataset}分成$k$个不重合的子集。
测试误差可以估计为$k$次计算后的平均测试误差。
在第$i$次测试时,数据的第$i$个子集用于\gls{test_set},其他的数据用于训练集。
带来的一个问题是不存在平均误差方差的无偏估计\citep{Bengio-Grandvalet-JMLR-04},但是我们通常会使用近似来解决。
\begin{algorithm}
\caption{$k$-折交叉验证算法。
当给定数据集$\SetD$对于简单的训练/测试或训练/验证分割而言太小难以产生泛化误差的准确估计时(因为在小的测试集上,$L$可能具有过高的方差),$k$-折交叉验证算法可以用于估计学习算法$A$的泛化误差。
数据集$\SetD$包含的元素是抽象的样本 $\Vz^{(i)}$(对于第$i$个样本),在\gls{supervised_learning}的情况代表(输入,目标)对$\Vz^{(i)} = (\Vx^{(i)}, y^{(i)})$ ,或者\gls{unsupervised_learning}的情况下仅用于输入$\Vz^{(i)} = \Vx^{(i)}$。
该算法返回$\SetD$中每个示例的误差向量$\Ve$,其均值是估计的泛化误差。
单个样本上的误差可用于计算平均值周围的置信区间(\eqnref{eq:confidence_interval})。
虽然这些置信区间在使用交叉验证之后不能很好地证明,但是通常的做法是只有当算法$A$误差的置信区间低于并且不与算法$B$的置信区间相交时,我们才声明算法$A$比算法$B$更好。}
\label{alg:xv}
\begin{algorithmic}
\item[] \hspace*{-4.2mm}{\bf Define} {\tt KFoldXV}($\SetD,A,L,k$):
\REQUIRE $\SetD$为给定数据集,其中元素为 $\Vz^{(i)}$
\REQUIRE $A$ 为学习算法,可视为一个函数(使用数据集作为输入,输出一个学好的函数)
\REQUIRE $L$ 为\gls{loss_function},可视为来自学好的函数$f$,将样本 $\Vz^{(i)} \in \SetD$ 映射到$\SetR$中标量的函数
\REQUIRE $k$为折数
\STATE 将 $\SetD$ 分为 $k$个互斥子集 $\SetD_i$,它们的并集为$\SetD$
\FOR{$i$ from $1$ to $k$}
\STATE $f_i = A(\SetD \backslash \SetD_i)$
\FOR{$\Vz^{(j)}$ in $\SetD_i$}
\STATE $e_j = L(f_i, \Vz^{(j)})$
\ENDFOR
\ENDFOR
\STATE {\bf Return} $\Ve$
\end{algorithmic}
\end{algorithm}
\section{估计、偏差和方差}
\label{sec:estimators_bias_and_variance}
统计领域为我们提供了很多工具来实现\gls{ML}目标,不仅可以解决训练集上的任务,还可以泛化。
基本的概念,例如参数估计、偏差和方差,对于正式地刻画泛化、欠拟合和过拟合都非常有帮助。
\subsection{点估计}
\label{sec:point_estimation}
点估计试图为一些感兴趣的量提供单个``最优''预测。
一般地,感兴趣的量可以是单个参数,或是某些参数模型中的一个向量参数,例如\secref{sec:example_linear_regression}\gls{linear_regression}中的权重,但是也有可能是整个函数。
为了区分参数估计和真实值,我们习惯将参数$\Vtheta$的点估计表示为$\hat{\Vtheta}$。
令$\{\Vx^{(1)},\dots,\Vx^{(m)}\}$是$m$个独立同分布(i.i.d.)的数据点。
\firstgls{point_estimator}或\firstgls{statistics}是这些数据的任意函数:
\begin{equation}
\hat{\Vtheta}_m = g(\Vx^{(1)}, \dots, \Vx^{(m)}) .
\end{equation}
这个定义不要求$g$返回一个接近真实$\Vtheta$的值,或者$g$的值域恰好是$\Vtheta$的允许取值范围。
点估计的定义非常宽泛,给了\gls{estimator:chap5}的设计者极大的灵活性。
虽然几乎所有的函数都可以称为\gls{estimator:chap5},但是一个良好的\gls{estimator:chap5}的输出会接近生成训练数据的真实参数$\Vtheta$。
% -- 119 --
现在,我们采取频率派在统计上的观点。
换言之,我们假设真实参数$\Vtheta$是固定但未知的,而点估计$\hat{\Vtheta}$是数据的函数。
由于数据是随机过程采样出来的,数据的任何函数都是随机的。
因此$\hat{\Vtheta}$是一个随机变量。
% -- 120 --
点估计也可以指输入和\gls{target}变量之间关系的估计。
我们将这种类型的点估计称为函数估计。
\paragraph{函数估计} 有时我们会关注函数估计(或函数近似)。
这时我们试图从输入向量$\Vx$预测变量$\Vy$。
我们假设有一个函数$f(\Vx)$表示$\Vy$和$\Vx$之间的近似关系。
例如,我们可能假设$\Vy = f(\Vx) + \Vepsilon$,其中$\Vepsilon$是$\Vy$中未能从$\Vx$预测的一部分。
在函数估计中,我们感兴趣的是用模型估计去近似$f$,或者估计$\hat{f}$。
函数估计和估计参数$\Vtheta$是一样的;函数估计$\hat{f}$是函数空间中的一个点估计。
\gls{linear_regression}示例(\secref{sec:example_linear_regression}中讨论的)和多项式回归示例(\secref{sec:capacity_overfitting_and_underfitting}中讨论的)都既可以被解释为估计参数$\Vw$,又可以被解释为估计从$\Vx$到$y$的函数映射$\hat{f}$。
现在我们回顾点估计最常研究的性质,并探讨这些性质说明了估计的哪些特点。
\subsection{偏差}
\label{sec:bias}
\gls{estimator}的偏差被定义为:
\begin{equation}
\label{eq:5.20}
\text{bias}(\hat{\Vtheta}_m) = \SetE(\hat{\Vtheta}_m) - \Vtheta,
\end{equation}
其中期望作用在所有数据(看作是从随机变量采样得到的)上,$\Vtheta$是用于定义数据生成分布的$\Vtheta$的真实值。
如果$\text{bias}(\hat{\Vtheta}_m)=0$,那么\gls{estimator:chap5} $\hat{\Vtheta}_m$被称为是\firstgls{unbiased},这意味着$\SetE(\hat{\Vtheta}_m) = \Vtheta$。
如果$\lim_{m\to\infty} \text{bias}(\hat{\Vtheta}_m)=0$,那么\gls{estimator:chap5} $\hat{\Vtheta}_m$被称为是\firstgls{asymptotically_unbiased},这意味着$\lim_{m\to\infty} \SetE(\hat{\Vtheta}_m) = \Vtheta$。
% -- 121 --
\paragraph{示例:伯努利分布}
考虑一组服从均值为$\theta$的伯努利分布的独立同分布的样本$\{x^{(1)}, \dots , x^{(m)}\}$:
\begin{equation}
P(x^{(i)}; \theta) = \theta^{x^{(i)}} (1-\theta)^{(1 - x^{(i)})}.
\end{equation}
这个分布中参数$\theta$的常用\gls{estimator:chap5}是训练\gls{example:chap5}的均值:
\begin{equation}
\label{eq:5.22}
\hat{\theta}_m = \frac{1}{m} \sum_{i=1}^m x^{(i)}.
\end{equation}
判断这个\gls{estimator:chap5}是否有偏,我们将\eqnref{eq:5.22}代入\eqnref{eq:5.20}:
\begin{align}
\text{bias}(\hat{\theta}_m) &= \SetE[\hat{\theta}_m] - \theta \\
&= \SetE \left[ \frac{1}{m} \sum_{i=1}^m x^{(i)} \right] - \theta \\
&= \frac{1}{m} \sum_{i=1}^m \SetE \left[x^{(i)} \right] - \theta \\
&= \frac{1}{m} \sum_{i=1}^m \sum_{x^{(i)} = 0}^1 \left( x^{(i)} \theta^{x^{(i)}} (1-\theta)^{(1-x^{(i)})} \right) - \theta \\
&= \frac{1}{m} \sum_{i=1}^m (\theta) - \theta \\
&= \theta - \theta = 0
\end{align}
因为$\text{bias}(\hat{\theta})=0$,我们称估计$\hat{\theta}$是无偏的。
\paragraph{示例:均值的高斯分布估计}
现在,考虑一组独立同分布的\gls{example:chap5} $\{x^{(1)}, \dots , x^{(m)}\}$服从高斯分布$p(x^{(i)}) = \mathcal{N}(x^{(i)}; \mu, \sigma^2)$,其中$i\in\{1, \dots, m\}$。
回顾高斯概率密度函数如下:
\begin{equation}
p(x^{(i)}; \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left( -\frac{1}{2} \frac{(x^{(i)} - \mu)^2}{\sigma^2} \right).
\end{equation}
高斯均值参数的常用\gls{estimator:chap5}被称为\firstgls{sample_mean}:
\begin{equation}
\hat{\mu}_m = \frac{1}{m} \sum_{i=1}^m x^{(i)}
\end{equation}
判断\gls{sample_mean}是否有偏,我们再次计算它的期望:
\begin{align}
\text{bias} (\hat{\mu}_m) &= \SetE[ \hat{\mu}_m ] - \mu \\
&= \SetE \left[ \frac{1}{m} \sum_{i=1}^m x^{(i)} \right] - \mu \\
&= \left( \frac{1}{m}\sum_{i=1}^m \SetE \left[ x^{(i)} \right] \right) - \mu \\
&= \left( \frac{1}{m}\sum_{i=1}^m \mu \right) - \mu \\
&= \mu - \mu = 0
\end{align}
因此我们发现\gls{sample_mean}是高斯均值参数的无偏\gls{estimator:chap5}。
% -- 122 --
\paragraph{示例:高斯分布方差估计}
本例中,我们比较高斯分布方差参数$\sigma^2$的两个不同估计。
我们探讨是否有一个是有偏的。
我们考虑的第一个方差估计被称为\firstgls{sample_variance}:
\begin{equation}
\hat{\sigma}_m^2 = \frac{1}{m} \sum_{i=1}^m \left( x^{(i)} - \hat{\mu}_m \right)^2,
\end{equation}
其中$\hat{\mu}_m$是\gls{sample_mean}。
更形式地,我们对计算感兴趣
\begin{equation}
\label{eq:5.37}
\text{bias} (\hat{\sigma}_m^2) = \SetE [ \hat{\sigma}_m^2 ] - \sigma^2.
\end{equation}
我们首先估计项$\SetE [ \hat{\sigma}_m^2 ]$:
\begin{align}
\SetE [ \hat{\sigma}_m^2 ] &= \SetE \left[ \frac{1}{m} \sum_{i=1}^m \left( x^{(i)} - \hat{\mu}_m \right)^2 \right] \\
&= \frac{m-1}{m} \sigma^2
\end{align}
回到\eqnref{eq:5.37},我们可以得出$\hat{\sigma}^2_m$的偏差是$-\sigma^2/m$。
因此\gls{sample_variance}是有偏估计。
\firstgls{unbiased_sample_variance}估计
\begin{equation}
\tilde{\sigma}_m^2 = \frac{1}{m-1} \sum_{i=1}^m \left( x^{(i)} - \hat{\mu}_m \right)^2
\end{equation}
提供了另一种可选方法。
正如名字所言,这个估计是无偏的。
换言之,我们会发现$\SetE[\tilde{\sigma}_m^2] = \sigma^2$:
\begin{align}
\SetE[\tilde{\sigma}_m^2] &= \SetE \left[ \frac{1}{m-1} \sum_{i=1}^m \left( x^{(i)} - \hat{\mu}_m \right)^2 \right] \\
&= \frac{m}{m-1} \SetE[ \hat{\sigma}_m^2 ] \\
&= \frac{m}{m-1} \left( \frac{m-1}{m} \sigma^2 \right) \\
&= \sigma^2.
\end{align}
% -- 123 --
我们有两个\gls{estimator:chap5}:一个是有偏的,另一个是无偏的。
尽管无偏估计显然是令人满意的,但它并不总是``最好''的估计。
我们将看到,经常会使用其他具有重要性质的有偏估计。
\subsection{方差和\glsentrytext{standard_error}}
\label{sec:variance_and_standard_error}
我们有时会考虑\gls{estimator:chap5}的另一个性质是它作为数据样本的函数,期望的变化程度是多少。
正如我们可以计算\gls{estimator:chap5}的期望来决定它的偏差,我们也可以计算它的方差。
\gls{estimator:chap5}的\firstgls{variance}就是一个\gls{variance}
\begin{equation}
\text{Var}(\hat{\theta})
\end{equation}
其中随机变量是训练集。
另外,方差的平方根被称为\firstgls{standard_error}\footnote{~严格的讲,standard error (se) 与 standard deviation (sd) 是两个概念。The standard error is ... an estimate of that standard deviation (摘自 wikipedia). 可以简单理解为,sd是理论值,se是计算值,在实际计算中,se会无限逼近sd。},记作$\text{SE}(\hat{\theta})$。
\gls{estimator:chap5}的方差或\gls{standard_error}告诉我们,当独立地从潜在的数据生成过程中重采样数据集时,如何期望估计的变化。
正如我们希望估计的偏差较小,我们也希望其方差较小。
当我们使用有限的样本计算任何统计量时,真实参数的估计都是不确定的,在这个意义下,从相同的分布得到其他样本时,它们的统计量也会不一样。
任何方差估计量的期望程度是我们想量化的误差的来源。
均值的\gls{standard_error}被记作
\begin{equation}
\label{eq:5.46}
\text{SE}(\hat{\mu}_m) = \sqrt{ \text{Var} \left[ \frac{1}{m} \sum_{i=1}^m x^{(i)} \right] } = \frac{\sigma}{\sqrt{m}},
\end{equation}
其中$\sigma^2$是\gls{example:chap5} $x^{(i)}$的真实方差。
通常通过$\sigma$的估计值来估计\gls{standard_error}。
可惜,样本方差的平方根和方差无偏估计的平方根都不是\gls{standard_deviation}的无偏估计。
这两种计算方法都倾向于低估真实的\gls{standard_deviation},但仍用于实际中。
相较而言,方差无偏估计的平方根较少被低估。
对于较大的$m$,这种近似非常合理。
% -- 124 --
均值的\gls{standard_error}在\gls{ML}实验中非常有用。
我们通常用\gls{test_set}样本的误差均值来估计泛化误差。
\gls{test_set}中\gls{example:chap5}的数量决定了这个估计的精确度。
中心极限定理告诉我们均值会接近一个高斯分布,我们可以用\gls{standard_error}计算出真实期望落在选定区间的概率。
例如,以均值$\hat{\mu}_m$为中心的$95\%$置信区间是
\begin{equation}
\label{eq:confidence_interval}
( \hat{\mu}_m - 1.96\text{SE}(\hat{\mu}_m), \hat{\mu}_m + 1.96 \text{SE}(\hat{\mu}_m) ),
\end{equation}
以上区间是基于均值$\hat{\mu}_m$和方差$\text{SE}(\hat{\mu}_m)^2$的高斯分布。
在\gls{ML}实验中,我们通常说算法$A$比算法$B$好,是指算法$A$的误差的$95\%$置信区间的上界小于算法$B$的误差的$95\%$置信区间的下界。
\paragraph{示例:伯努利分布} 我们再次考虑从伯努利分布(回顾$P(x^{(i)}; \theta) = \theta^{x^{(i)}} (1-\theta)^{1 - x^{(i)}}$)中独立同分布采样出来的一组\gls{example:chap5} $\{ x^{(1)}, \dots, x^{(m)} \}$。
这次我们关注估计$\hat{\theta}_m = \frac{1}{m} \sum_{i=1}^m x^{(i)}$的方差:
\begin{align}
\text{Var}\left( \hat{\theta}_m \right) &= \text{Var}\left( \frac{1}{m} \sum_{i=1}^m x^{(i)} \right) \\
&= \frac{1}{m^2} \sum_{i=1}^m \text{Var} \left( x^{(i)} \right) \\
&= \frac{1}{m^2} \sum_{i=1}^m \theta (1 - \theta) \\
&= \frac{1}{m^2} m\theta(1-\theta) \\
&= \frac{1}{m} \theta(1-\theta)
\end{align}
\gls{estimator:chap5}方差的下降速率是关于\gls{dataset}\gls{example:chap5}数目$m$的函数。
这是常见估计量的普遍性质,在探讨一致性(参考\secref{sec:consistency})时,我们会继续讨论。
% -- 125 --
\subsection{权衡偏差和方差以最小化均方误差}
\label{sec:trading_off_bias_and_variance_to_minimize_mean_squared_error}
偏差和方差度量着估计量的两个不同误差来源。
偏差度量着偏离真实函数或参数的误差期望。
而方差度量着数据上任意特定采样可能导致的估计期望的偏差。
当我们可以在一个偏差更大的估计和一个方差更大的估计中进行选择时,会发生什么呢?我们该如何选择?
例如,想象我们希望近似\figref{fig:chap5_underfit_just_right_overfit}中的函数,我们只可以选择一个偏差较大的估计或一个方差较大的估计,我们该如何选择呢?
判断这种权衡最常用的方法是交叉验证。
经验上,交叉验证在真实世界的许多任务中都非常成功。
另外,我们也可以比较这些估计的\firstall{mean_squared_error}:
\begin{align}
\text{MSE} &= \SetE[ ( \hat{\theta}_m - \theta )^2 ] \\
&= \text{Bias}( \hat{\theta}_m )^2 + \text{Var}( \hat{\theta}_m ) \label{eq:5.54}
\end{align}
\glssymbol{mean_squared_error}\,度量着估计和真实参数$\theta$之间平方误差的总体期望偏差。
如\eqnref{eq:5.54}所示,\glssymbol{mean_squared_error}\,估计包含了偏差和方差。
理想的估计具有较小的\,\glssymbol{mean_squared_error}\,或是在检查中会稍微约束它们的偏差和方差。
偏差和方差的关系和\gls{ML}容量、欠拟合和过拟合的概念紧密相联。
用\,\glssymbol{mean_squared_error}\,度量泛化误差(偏差和方差对于泛化误差都是有意义的)时,增加容量会增加方差,降低偏差。
如\figref{fig:chap5_bias_variance_tradeoff}所示,我们再次在关于容量的函数中,看到泛化误差的U形曲线。
\begin{figure}[!htb]
\ifOpenSource
\centerline{\includegraphics{figure.pdf}}
\else
\centerline{\includegraphics{Chapter5/figures/bias_variance_tradeoff}}
\fi
\caption{当\gls{capacity}增大($x$轴)时,\gls{BIAS}(用点表示)随之减小,而方差(虚线)随之增大,使得\gls{generalization_error}(加粗曲线)产生了另一种U形。如果我们沿着轴改变\gls{capacity},会发现\gls{optimal_capacity},当\gls{capacity}小于\gls{optimal_capacity}会呈现\gls{underfitting},大于时导致\gls{overfitting}。这种关系与\secref{sec:capacity_overfitting_and_underfitting}以及\figref{fig:chap5_generalization_vs_capacity}中讨论的\gls{capacity}、\gls{underfitting}和\gls{overfitting}之间的关系类似。}
\label{fig:chap5_bias_variance_tradeoff}
\end{figure}
% -- 126 --
\subsection{一致性}
\label{sec:consistency}
目前我们已经探讨了固定大小训练集下不同\gls{estimator:chap5}的性质。
通常,我们也会关注训练数据增多后\gls{estimator:chap5}的效果。
特别地,我们希望当\gls{dataset}中数据点的数量$m$增加时,点估计会收敛到对应参数的真实值。
更形式地,我们想要
\begin{equation}
\label{eq:5.55}
\plim_{m\to\infty} \hat{\theta}_m = \theta.
\end{equation}
符号$\plim$表示依概率收敛,即对于任意的$\epsilon > 0$,当$m\to\infty$时,有$P(|\hat{\theta}_m - \theta| > \epsilon) \to 0$。
\eqnref{eq:5.55}表示的条件被称为\firstgls{consistency}。
有时它是指弱一致性,强一致性是指\firstgls{almost_sure}从$\hat{\theta}$收敛到$\theta$。
\firstgls{almost_sure_convergence}是指当$p(\lim_{m\to\infty} \RVx^{(m)} = \Vx) = 1 $时,随机变量序列$\RVx^{(1)}$,$\RVx^{(2)}$,$\dots$收敛到$\Vx$。
一致性保证了\gls{estimator:chap5}的偏差会随数据\gls{example:chap5}数目的增多而减少。
然而,反过来是不正确的——渐近无偏并不意味着一致性。
例如,考虑用包含$m$个样本的\gls{dataset} $\{x^{(1)},\dots,x^{(m)}\}$估计正态分布$\mathcal{N}(x;\mu,\sigma^2)$的均值参数$\mu$。
我们可以使用\gls{dataset}的第一个\gls{example:chap5} $x^{(1)}$作为无偏估计量:$\hat{\theta} = x^{(1)}$。
在该情况下,$\SetE(\hat{\theta}_m) = \theta$,所以不管观测到多少数据点,该\gls{estimator:chap5}都是无偏的。
然而,这不是一个一致估计,因为它\emph{不}满足当$m\to\infty$时,$\hat{\theta}_m \to \theta$。
% -- 127 --
\section{\glsentrytext{maximum_likelihood_estimation}}
\label{sec:maximum_likelihood_estimation}