forked from exacity/deeplearningbook-chinese
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlinear_algebra.tex
968 lines (705 loc) · 41.8 KB
/
linear_algebra.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
% !Mode:: "TeX:UTF-8"
% Translator: Yujun Li
\chapter{线性代数}
\label{chap:linear_algebra}
线性代数作为数学的一个分支,广泛应用于科学和工程中。
然而,因为线性代数主要是面向连续数学,而非离散数学,所以很多计算机科学家很少接触它。
掌握好线性代数对于理解和从事机器学习算法相关工作是很有必要的,尤其对于深度学习算法而言。
因此,在开始介绍深度学习之前,我们集中探讨一些必备的线性代数知识。
如果你已经很熟悉线性代数,那么可以轻松地跳过本章。
如果你已经了解这些概念,但是需要一份索引表来回顾一些重要公式,那么我们推荐\emph{The Matrix Cookbook} \citep{matrix-cookbook}。
如果你没有接触过线性代数,那么本章将告诉你本书所需的线性代数知识,不过我们仍然非常建议你参考其他专门讲解线性代数的文献,例如~\cite{shilov1977linear}。
最后,本章略去了很多重要但是对于理解深度学习非必需的线性代数知识。
\section{标量、向量、矩阵和张量}
\label{sec:scalars_vectors_matrices_and_tensors}
学习线性代数,会涉及以下几类数学概念:
\begin{itemize}
\item \firstgls{scalar}:一个标量就是一个单独的数,它不同于线性代数中研究的其他大部分对象(通常是多个数的数组)。
我们用斜体表示标量。标量通常被赋予小写的变量名称。
当我们介绍标量时,会明确它们是哪种类型的数。
比如,在定义实数标量时,我们可能会说``令$\Ss \in \SetR$表示一条线的斜率'';在定义自然数标量时,我们可能会说``令$\Sn\in\SetN$表示元素的数目''。
% -- 29 --
\item \firstgls{vector}:一个向量是一列数。
这些数是有序排列的。
通过次序中的\gls{index},我们可以确定每个单独的数。
通常我们赋予向量粗体的小写变量名称,比如$\Vx$。
向量中的元素可以通过带脚标的斜体表示。
向量$\Vx$的第一个元素是$\Sx_1$,第二个元素是$\Sx_2$,等等。
我们也会注明存储在向量中的元素是什么类型的。
如果每个元素都属于$\SetR$,并且该向量有$\Sn$个元素,那么该向量属于实数集$\SetR$的$\Sn$次笛卡尔乘积构成的集合,记为$\SetR^n$。
当需要明确表示向量中的元素时,我们会将元素排列成一个方括号包围的纵列:
\begin{equation}
\Vx=\begin{bmatrix} \Sx_1 \\
\Sx_2 \\
\vdots \\
\Sx_n
\end{bmatrix}.
\end{equation}
我们可以把向量看作空间中的点,每个元素是不同坐标轴上的坐标。
有时我们需要\gls{index}向量中的一些元素。
在这种情况下,我们定义一个包含这些元素\gls{index}的集合,然后将该集合写在脚标处。
比如,指定$\Sx_1$,$\Sx_3$和$\Sx_6$,我们定义集合$S=\{1,3,6\}$,然后写作$\Vx_S$。我
们用符号-表示集合的补集中的\gls{index}。
比如$\Vx_{-1}$表示$\Vx$中除$\Sx_1$外的所有元素,$\Vx_{-S}$表示$\Vx$中除$\Sx_1$,$\Sx_3$,$\Sx_6$外所有元素构成的向量。
\item \firstgls{matrix}:矩阵是一个二维数组,其中的每一个元素被两个\gls{index}(而非一个)所确定。
我们通常会赋予矩阵粗体的大写变量名称,比如$\MA$。
如果一个实数矩阵高度为$m$,宽度为$n$,那么我们说$\MA\in \SetR^{m\times n}$。
我们在表示矩阵中的元素时,通常以不加粗的斜体形式使用其名称,\gls{index}用逗号间隔。
比如,$\SA_{1,1}$表示$\MA$左上的元素,$\SA_{m,n}$表示$\MA$右下的元素。
我们通过用``:''表示水平坐标,以表示垂直坐标$\Si$中的所有元素。
比如,$\MA_{i,:}$表示$\MA$中垂直坐标$i$上的一横排元素。
这也被称为$\MA$的第$i$~\firstgls{row}。
同样地,$\MA_{:,i}$表示$\MA$的第$i$~\firstgls{column}。
当我们需要明确表示矩阵中的元素时,我们将它们写在用方括号括起来的数组中:
\begin{equation}
\begin{bmatrix}
A_{1,1} & A_{1,2} \\
A_{2,1} & A_{2,2} \\
\end{bmatrix}.
\end{equation}
有时我们需要\gls{index}矩阵值表达式,而这些表达式不是单个字母。
在这种情况下,我们在表达式后面接下标,但不必将矩阵的变量名称小写化。
比如,$f(\MA)_{i,j}$表示函数$f$作用在$\MA$上输出的矩阵的第$i$行第$j$列元素。
% -- 30 --
\item \firstgls{tensor}:在某些情况下,我们会讨论坐标超过两维的数组。
一般地,一个数组中的元素分布在若干维坐标的规则网格中,我们称之为张量。
我们使用字体$\TSA$来表示张量``A''。
张量$\TSA$中坐标为$(i,j,k)$的元素记作$\TEA_{i,j,k}$。
\end{itemize}
\firstgls{transpose}是矩阵的重要操作之一。
矩阵的转置是以对角线为轴的镜像,这条从左上角到右下角的对角线被称为\firstgls{main_diagonal}。
\figref{fig:chap2_transpose}显示了这个操作。
我们将矩阵$\MA$的转置表示为$\MA^\top$,定义如下
\begin{equation}
(\MA^\top)_{i,j}= \SA_{j,i}.
\end{equation}
向量可以看作只有一列的矩阵。
对应地,向量的转置可以看作是只有一行的矩阵。
有时,我们通过将向量元素作为行矩阵写在文本行中,然后使用转置操作将其变为标准的列向量,来定义一个向量,比如$\Vx=[\Sx_1, \Sx_2, \Sx_3]^\top$.
标量可以看作是只有一个元素的矩阵。
因此,标量的转置等于它本身,$\Sa=\Sa^\top$。
\begin{figure}[!hbt]
\ifOpenSource
\centerline{\includegraphics{figure.pdf}}
\else
\centerline{\includegraphics{Chapter2/figures/transpose}}
\fi
\caption{矩阵的转置可以看成以主对角线为轴的一个镜像。}
\label{fig:chap2_transpose}
\end{figure}
% -- 31 --
只要矩阵的形状一样,我们可以把两个矩阵相加。
两个矩阵相加是指对应位置的元素相加,比如$\MC=\MA+\MB$,其中$\SC_{i,j}= \SA_{i,j}+\SB_{i,j}$。
标量和矩阵相乘,或是和矩阵相加时,我们只需将其与矩阵的每个元素相乘或相加,比如$\MD = \Sa \cdot \MB + \Sc$,其中$\SD_{i,j} = \Sa\cdot \SB_{i,j} + \Sc$。
在深度学习中,我们也使用一些不那么常规的符号。
我们允许矩阵和向量相加,产生另一个矩阵:$\MC=\MA + \Vb$,其中$\SC_{i,j}= \SA_{i,j} + \Sb_{j}$。
换言之,向量$\Vb$和矩阵$\MA$的每一行相加。
这个简写方法使我们无需在加法操作前定义一个将向量$\Vb$复制到每一行而生成的矩阵。
这种隐式地复制向量$\Vb$到很多位置的方式,被称为\firstgls{broadcasting}。
\section{矩阵和向量相乘}
\label{sec:multiplying_matrices_and_vectors}
矩阵乘法是矩阵运算中最重要的操作之一。
两个矩阵$\MA$和$\MB$的\firstgls{matrix_product}是第三个矩阵$\MC$。
为了使乘法定义良好,矩阵$\MA$的列数必须和矩阵$\MB$的行数相等。
如果矩阵$\MA$的形状是$\Sm \times \Sn$,矩阵$\MB$的形状是$\Sn\times \Sp$,那么矩阵$\MC$的形状是$\Sm\times \Sp$。
我们可以通过将两个或多个矩阵并列放置以书写矩阵乘法,例如
\begin{equation}
\MC=\MA\MB.
\end{equation}
具体地,该乘法操作定义为
\begin{equation}
\SC_{i,j}=\sum_k \SA_{i,k} \SB_{k,j}.
\end{equation}
需要注意的是,两个矩阵的标准乘积\emph{不是}指两个矩阵中对应元素的乘积。
不过,那样的矩阵操作确实是存在的,被称为\firstgls{element_wise_product}或者\firstgls{hadamard_product},记为$\MA\odot\MB$。
两个相同维数的向量$\Vx$和$\Vy$的\firstgls{dot_product}可看作是矩阵乘积$\Vx^\top\Vy$。
我们可以把矩阵乘积$\MC=\MA\MB$中计算$\SC_{i,j}$的步骤看作是$\MA$的第$\Si$行和$\MB$的第$\Sj$列之间的\gls{dot_product}。
矩阵乘积运算有许多有用的性质,从而使矩阵的数学分析更加方便。
比如,矩阵乘积服从分配律:
\begin{equation}
\MA(\MB+\MC)=\MA\MB +\MA\MC.
\end{equation}
矩阵乘积也服从结合律:
\begin{equation}
\MA(\MB\MC)=(\MA\MB)\MC.
\end{equation}
% -- 32 --
不同于标量乘积,矩阵乘积\emph{并不}满足交换律($\MA\MB=\MB\MA$的情况并非总是满足)。
然而,两个向量的\firstgls{dot_product}满足交换律:
\begin{equation}
\Vx^\top\Vy=\Vy^\top\Vx.
\label{eq:2.8}
\end{equation}
矩阵乘积的转置有着简单的形式:
\begin{equation}
(\MA\MB)^\top=\MB^\top\MA^\top.
\end{equation}
利用两个向量点积的结果是标量,标量转置是自身的事实,我们可以证明\eqnref{eq:2.8}:
\begin{equation}
\Vx^\top \Vy = \left(\Vx^\top \Vy \right)^\top = \Vy^\top \Vx.
\end{equation}
由于本书的重点不是线性代数,我们并不试图展示矩阵乘积的所有重要性质,但读者应该知道矩阵乘积还有很多有用的性质。
现在我们已经知道了足够多的线性代数符号,可以表达下列线性方程组:
\begin{equation}
\MA\Vx=\Vb
\label{eq:2.11}
\end{equation}
其中$\MA\in \SetR^{m\times n}$是一个已知矩阵,$\Vb\in\SetR^m$是一个已知向量,$\Vx\in\SetR^n$是一个我们要求解的未知向量。
向量$\Vx$的每一个元素$\Sx_i$都是未知的。
矩阵$\MA$的每一行和$\Vb$中对应的元素构成一个约束。
我们可以把\eqnref{eq:2.11}重写为
\begin{gather}
\MA_{1,:}\Vx=b_1\\
\MA_{2,:}\Vx=b_2 \\
\cdots \\
\MA_{m,:}\Vx=b_m
\end{gather}
或者,更明确地,写作
\begin{gather}
\MA_{1,1}x_1+\MA_{1,2}x_2+\cdots \MA_{1,n}x_n = b_1\\
\MA_{2,1}x_1+\MA_{2,2}x_2+\cdots \MA_{2,n}x_n = b_2\\
\cdots\\
\MA_{m,1}x_1+\MA_{m,2}x_2+\cdots \MA_{m,n}x_n = b_m.
\end{gather}
矩阵向量乘积符号为这种形式的方程提供了更紧凑的表示。
% -- 33 --
\section{单位矩阵和逆矩阵}
\label{sec:identity_and_inverse_atrices}
线性代数提供了被称为\firstgls{matrix_inverse}的强大工具。
对于大多数矩阵$\MA$,我们都能通过\gls{matrix_inverse}解析地求解\eqnref{eq:2.11}。
为了描述矩阵逆,我们首先需要定义\firstgls{identity_matrix}的概念。
任意向量和单位矩阵相乘,都不会改变。
我们将保持$\Sn$维向量不变的单位矩阵记作$\MI_{\Sn}$。
形式上,$\MI_{\Sn}\in \SetR^{\Sn\times \Sn}$,
\begin{equation}
\forall \Vx \in \SetR^{\Sn}, \MI_{\Sn} \Vx = \Vx.
\end{equation}
单位矩阵的结构很简单:所有沿主对角线的元素都是$1$,而所有其他位置的元素都是$0$。
如\figref{fig:chap2_empty2}所示。
\begin{figure}[!htb]
\ifOpenSource
\centerline{\includegraphics{figure.pdf}}
\else
\centering
\begin{equation*}
\begin{bmatrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \\
\end{bmatrix}
\end{equation*}
\fi
\caption{单位矩阵的一个样例:这是$\MI_3$。}
\label{fig:chap2_empty2}
\end{figure}
矩阵$\MA$的\firstgls{matrix_inverse}记作$\MA^{-1}$,其定义的矩阵满足如下条件
\begin{equation} \MA^{-1}\MA = \MI_{\Sn}. \end{equation}
现在我们可以通过以下步骤求解\eqnref{eq:2.11}:
\begin{gather}
\MA\Vx=\Vb \\
\MA^{-1}\MA\Vx = \MA^{-1}\Vb \\
\MI_{\Sn} \Vx=\MA^{-1}\Vb \\
\Vx=\MA^{-1}\Vb.
\end{gather}
当然,这取决于我们能否找到一个逆矩阵$\MA^{-1}$。
在接下来的章节中,我们会讨论逆矩阵$\MA^{-1}$存在的条件。
当逆矩阵$\MA^{-1}$存在时,有几种不同的算法都能找到它的闭解形式。
理论上,相同的逆矩阵可用于多次求解不同向量$\Vb$的方程。
然而,逆矩阵$\MA^{-1}$主要是作为理论工具使用的,并不会在大多数软件应用程序中实际使用。
这是因为逆矩阵$\MA^{-1}$在数字计算机上只能表现出有限的精度,有效使用向量$\Vb$的算法通常可以得到更精确的$\Vx$。
% -- 34 --
\section{线性相关和生成子空间}
\label{sec:linear_dependence_and_span}
如果逆矩阵$\MA^{-1}$存在,那么\eqnref{eq:2.11}肯定对于每一个向量$\Vb$恰好存在一个解。
但是,对于方程组而言,对于向量$\Vb$的某些值,有可能不存在解,或者存在无限多个解。
存在多于一个解但是少于无限多个解的情况是不可能发生的;因为如果$\Vx$和$\Vy$都是某方程组的解,则
\begin{equation}
\Vz=\alpha \Vx + (1-\alpha) \Vy
\end{equation}
(其中$\alpha$取任意实数)也是该方程组的解。
为了分析方程有多少个解,我们可以将$\MA$的列向量看作从\firstgls{origin}(元素都是零的向量)出发的不同方向,确定有多少种方法可以到达向量$\Vb$。
在这个观点下,向量$\Vx$中的每个元素表示我们应该沿着这些方向走多远,即$\Sx_{\Si}$表示我们需要沿着第$\Si$个向量的方向走多远:
\begin{equation}
\MA \Vx = \sum_i x_i \MA_{:,i}.
\end{equation}
一般而言,这种操作被称为\firstgls{linear_combination}。
形式上,一组向量的线性组合,是指每个向量乘以对应标量系数之后的和,即:
\begin{equation}
\sum_i \Sc_i \Vv^{(i)}.
\end{equation}
一组向量的\firstgls{span}是原始向量线性组合后所能抵达的点的集合。
确定$\MA\Vx=\Vb$是否有解相当于确定向量$\Vb$是否在$\MA$列向量的\gls{span}中。
这个特殊的\gls{span}被称为$\MA$的\firstgls{column_space}或者$\MA$的\firstgls{range}。
为了使方程$\MA \Vx=\Vb$对于任意向量$\Vb \in \SetR^m$都存在解,我们要求$\MA$的列空间构成整个$\SetR^{\Sm}$。
如果$\SetR^m$中的某个点不在$\MA$的列空间中,那么该点对应的$\Vb$会使得该方程没有解。
矩阵$\MA$的列空间是整个$\SetR^m$的要求,意味着$\MA$至少有$m$列,即$n\geq m$。
否则,$\MA$列空间的维数会小于$m$。
例如,假设$\MA$是一个$3\times 2$的矩阵。
目标$\Vb$是$3$维的,但是$\Vx$只有$2$维。
所以无论如何修改$\Vx$的值,也只能描绘出$\SetR^3$空间中的二维平面。
当且仅当向量$\Vb$在该二维平面中时,该方程有解。
% -- 35 --
不等式$n\geq m$仅是方程对每一点都有解的必要条件。
这不是一个充分条件,因为有些列向量可能是冗余的。
假设有一个$\SetR^{2\times 2}$中的矩阵,它的两个列向量是相同的。
那么它的列空间和它的一个列向量作为矩阵的列空间是一样的。
换言之,虽然该矩阵有$2$列,但是它的列空间仍然只是一条线,不能涵盖整个$\SetR^2$空间。
正式地说,这种冗余被称为\firstgls{linear_dependence}。
如果一组向量中的任意一个向量都不能表示成其他向量的线性组合,那么这组向量称为\firstgls{linearly_independent}。
如果某个向量是一组向量中某些向量的线性组合,那么我们将这个向量加入这组向量后不会增加这组向量的\gls{span}。
这意味着,如果一个矩阵的\gls{column_space}涵盖整个$\SetR^m$,那么该矩阵必须包含至少一组$m$个线性无关的向量。
这是\eqnref{eq:2.11}对于每一个向量$\Vb$的取值都有解的充分必要条件。
值得注意的是,这个条件是说该向量集恰好有$m$个线性无关的列向量,而不是至少$m$个。
不存在一个$m$维向量的集合具有多于$m$个彼此线性不相关的列向量,但是一个有多于$m$个列向量的矩阵有可能拥有不止一个大小为$m$的线性无关向量集。
要想使矩阵可逆,我们还需要保证\eqnref{eq:2.11}对于每一个$\Vb$值至多有一个解。
为此,我们需要确保该矩阵至多有$m$个列向量。
否则,该方程会有不止一个解。
综上所述,这意味着该矩阵必须是一个\firstgls{square},即$m=n$,并且所有列向量都是线性无关的。一个列向量线性相关的方阵被称为\firstgls{singular}。
如果矩阵$\MA$不是一个方阵或者是一个奇异的方阵,该方程仍然可能有解。
但是我们不能使用矩阵逆去求解。
目前为止,我们已经讨论了逆矩阵左乘。我们也可以定义逆矩阵右乘:
\begin{equation}
\MA\MA^{-1}=\MI.
\end{equation}
对于方阵而言,它的左逆和右逆是相等的。
\section{范数}
\label{sec:norms}
有时我们需要衡量一个向量的大小。
在机器学习中,我们经常使用被称为\firstgls{norm}的函数衡量向量大小。
形式上,$L^p$范数定义如下
\begin{equation}
\norm{\Vx}_p = \left( \sum_i |x_i|^p \right)^{\frac{1}{p}}
\label{eq:2.30}
\end{equation}
其中$p\in \SetR$,$p\geq 1$。
% -- 36 --
范数(包括$L^p$范数)是将向量映射到非负值的函数。
直观上来说,向量$\Vx$的范数衡量从原点到点$\Vx$的距离。
更严格地说,范数是满足下列性质的任意函数:
\begin{itemize}
\item $f(\Vx) = 0 \Rightarrow \Vx = \mathbf{0}$
\item $f(\Vx + \Vy) \leq f(\Vx) + f(\Vy)$ (\firstgls{triangle_inequality})
\item $\forall \alpha \in \SetR$, $f(\alpha \Vx) = |\alpha| f(\Vx)$
\end{itemize}
当$p=2$时,$L^2$范数被称为\firstgls{euclidean_norm}。
它表示从原点出发到向量$\Vx$确定的点的欧几里得距离。
$L^2$范数在机器学习中出现地十分频繁,经常简化表示为$\norm{x}$,略去了下标$2$。
平方$L^2$范数也经常用来衡量向量的大小,可以简单地通过\gls{dot_product} $\Vx^\top\Vx$计算。
平方$L^2$范数在数学和计算上都比$L^2$范数本身更方便。
例如,平方$L^2$范数对$\Vx$中每个元素的导数只取决于对应的元素,而$L^2$范数对每个元素的导数却和整个向量相关。
但是在很多情况下,平方$L^2$范数也可能不受欢迎,因为它在原点附近增长得十分缓慢。
在某些机器学习应用中,区分恰好是零的元素和非零但值很小的元素是很重要的。
在这些情况下,我们转而使用在各个位置斜率相同,同时保持简单的数学形式的函数:$L^1$范数。
$L^1$范数可以简化如下:
\begin{equation}
\norm{\Vx}_1 = \sum_i |x_i|.
\end{equation}
当机器学习问题中零和非零元素之间的差异非常重要时,通常会使用$L^1$范数。
每当$\Vx$中某个元素从$0$增加$\epsilon$,对应的$L^1$范数也会增加$\epsilon$。
有时候我们会统计向量中非零元素的个数来衡量向量的大小。
有些作者将这种函数称为``$L^0$范数'',但是这个术语在数学意义上是不对的。
向量的非零元素的数目不是范数,因为对向量缩放$\alpha$倍不会改变该向量非零元素的数目。
$L^1$范数经常作为表示非零元素数目的替代函数。
% -- 37 --
另外一个经常在机器学习中出现的范数是$L^\infty$范数,也被称为\,\firstgls{max_norm}。
这个范数表示向量中具有最大幅值的元素的绝对值:
\begin{equation}
\norm{\Vx}_\infty = \max_i |x_i|.
\end{equation}
有时候我们可能也希望衡量矩阵的大小。
在深度学习中,最常见的做法是使用\firstgls{frobenius_norm},
\begin{equation}
\norm{\MA}_F = \sqrt{\sum_{i,j} A_{i,j}^2},
%%lyj 原文是\norm{A}_F ...
\end{equation}
其类似于向量的$L^2$范数。
两个向量的\firstgls{dot_product}可以用范数来表示。
具体地,
\begin{equation}
\Vx^\top\Vy = \norm{\Vx}_2\norm{\Vy}_2 \cos \theta
\end{equation}
其中$\theta$表示$\Vx$和$\Vy$之间的夹角。
\section{特殊类型的矩阵和向量}
\label{sec:special_kinds_of_matrices_and_vectors}
有些特殊类型的矩阵和向量是特别有用的。
\firstgls{diagonal_matrix}只在主对角线上含有非零元素,其他位置都是零。
形式上,矩阵$\MD$是对角矩阵,当且仅当对于所有的$i\neq j$,$\SD_{i,j}=0$。
我们已经看到过一个对角矩阵:单位矩阵,对角元素全部是$1$。
我们用$\text{diag}(\Vv)$表示一个对角元素由向量$\Vv$中元素给定的对角方阵。
对角矩阵受到关注的部分原因是对角矩阵的乘法计算很高效。
计算乘法$\text{diag}(\Vv)\Vx$,我们只需要将$\Vx$中的每个元素$x_i$放大$v_i$倍。
换言之,$\text{diag}(\Vv)\Vx=\Vv \odot \Vx$。
计算对角方阵的逆矩阵也很高效。
对角方阵的逆矩阵存在,当且仅当对角元素都是非零值,在这种情况下,$\text{diag}(\Vv)^{-1}=\text{diag}([1/v_1,\dots,1/v_n]^\top)$。
在很多情况下,我们可以根据任意矩阵导出一些通用的机器学习算法;但通过将一些矩阵限制为对角矩阵,我们可以得到计算代价较低的(并且简明扼要的)算法。
不是所有的对角矩阵都是方阵。
长方形的矩阵也有可能是对角矩阵。
非方阵的对角矩阵没有逆矩阵,但我们仍然可以高效地计算它们的乘法。
对于一个长方形对角矩阵$\MD$而言,乘法$\MD\Vx$会涉及到$\Vx$中每个元素的缩放,如果$\MD$是瘦长型矩阵,那么在缩放后的末尾添加一些零;如果$\MD$是胖宽型矩阵,那么在缩放后去掉最后一些元素。
% -- 38 --
\firstgls{symmetric}矩阵是转置和自己相等的矩阵:
\begin{equation}
\MA=\MA^\top.
\end{equation}
当某些不依赖参数顺序的双参数函数生成元素时,对称矩阵经常会出现。
例如,如果$\MA$是一个距离度量矩阵,$\MA_{i,j}$表示点$i$到点$j$的距离,那么$\MA_{i,j}=\MA_{j,i}$,因为距离函数是对称的。
\firstgls{unit_vector}是具有\firstgls{unit_norm}的向量:
\begin{equation}
\norm{\Vx}_2=1.
\end{equation}
如果$\Vx^\top \Vy = 0$,那么向量$\Vx$和向量$\Vy$互相\firstgls{orthogonal}。
如果两个向量都有非零范数,那么这两个向量之间的夹角是$90$度。
在$\SetR^n$中,至多有$n$个范数非零向量互相正交。
如果这些向量不仅互相正交,并且范数都为$1$,那么我们称它们是\firstgls{orthonormal}。
\firstgls{orthogonal_matrix}是指行向量和列向量是分别标准正交的方阵:
\begin{equation}
\MA^\top\MA=\MA\MA^\top=\MI.
\end{equation}
这意味着
\begin{equation}
\MA^{-1}=\MA^\top,
\end{equation}
所以正交矩阵受到关注是因为求逆计算代价小。
我们需要注意正交矩阵的定义。
违反直觉的是,正交矩阵的行向量不仅是正交的,还是标准正交的。
对于行向量或列向量互相正交但不是标准正交的矩阵,没有对应的专有术语。
\section{\glsentrytext{eigendecomposition}}
\label{sec:eigendecomposition}
许多数学对象可以通过将它们分解成多个组成部分或者找到它们的一些属性而更好地理解,这些属性是通用的,而不是由我们选择表示它们的方式产生的。
% -- 39 --
例如,整数可以分解为质因数。
我们可以用十进制或二进制等不同方式表示整数$12$,但是$12=2\times 2\times 3$永远是对的。
从这个表示中我们可以获得一些有用的信息,比如$12$不能被$5$整除,或者$12$的倍数可以被$3$整除。
正如我们可以通过分解质因数来发现整数的一些内在性质,我们也可以通过分解矩阵来发现矩阵表示成数组元素时不明显的函数性质。
\firstgls{eigendecomposition}是使用最广的矩阵分解之一,即我们将矩阵分解成一组特征向量和特征值。
方阵$\MA$的\firstgls{eigenvector}是指与$\MA$相乘后相当于对该向量进行缩放的非零向量$\Vv$:
\begin{equation}
\MA\Vv=\lambda \Vv.
\end{equation}
标量$\lambda$被称为这个特征向量对应的\firstgls{eigenvalue}。
(类似地,我们也可以定义\firstgls{left_Evector} $\Vv^\top\MA=\lambda \Vv^\top$,但是通常我们更关注\firstgls{right_Evector})。
如果$\Vv$是$\MA$的特征向量,那么任何缩放后的向量$s\Vv$~($s\in \SetR$,$s\neq 0$)也是$\MA$的特征向量。
此外,$s\Vv$和$\Vv$有相同的特征值。
基于这个原因,通常我们只考虑单位特征向量。
假设矩阵$\MA$有$n$个线性无关的特征向量$\{\Vv^{(1)}, \dots, \Vv^{(n)}\}$,对应着特征值$\{\lambda_1, \dots , \lambda_n \}$。
我们将特征向量连接成一个矩阵,使得每一列是一个特征向量:$\MV=[\Vv^{(1)}, \dots, \Vv^{(n)}]$.
类似地,我们也可以将特征值连接成一个向量$\Vlambda = [\lambda_1, \dots , \lambda_n]^\top$。
因此$\MA$的\firstgls{eigendecomposition}可以记作
\begin{equation}
\MA = \MV \text{diag}(\Vlambda) \MV^{-1}.
\end{equation}
我们已经看到了\emph{构建}具有特定特征值和特征向量的矩阵,能够使我们在目标方向上延伸空间。
我们还常常希望将矩阵\firstgls{decompose}成特征值和特征向量。
这样可以帮助我们分析矩阵的特定性质,就像质因数分解有助于我们理解整数。
不是每一个矩阵都可以分解成特征值和特征向量。
在某些情况下,特征分解存在,但是会涉及复数而非实数。
幸运的是,在本书中,我们通常只需要分解一类有简单分解的矩阵。
具体来讲,每个实对称矩阵都可以分解成实特征向量和实特征值:
\begin{equation}
\MA = \MQ \VLambda \MQ^\top.
\end{equation}
其中$\MQ$是$\MA$的特征向量组成的正交矩阵,$\VLambda$是对角矩阵。
特征值$\Lambda_{i,i}$对应的特征向量是矩阵$\MQ$的第$i$列,记作$\MQ_{:,i}$。
因为$\MQ$是正交矩阵,我们可以将$\MA$看作沿方向$\Vv^{(i)}$延展$\lambda_i$倍的空间。
如\figref{fig:chap2_eigen_ellipse}所示的例子。
% -- 40 --
虽然任意一个实对称矩阵$\MA$都有特征分解,但是特征分解可能并不唯一。
如果两个或多个特征向量拥有相同的特征值,那么在由这些特征向量产生的生成子空间中,任意一组正交向量都是该特征值对应的特征向量。
因此,我们可以等价地从这些特征向量中构成$\MQ$作为替代。
按照惯例,我们通常按降序排列$\VLambda$的元素。
在该约定下,特征分解唯一当且仅当所有的特征值都是唯一的。
\begin{figure}[!htb]
\ifOpenSource
\centerline{\includegraphics{figure.pdf}}
\else
\centerline{\includegraphics[width=0.8\textwidth]{Chapter2/figures/eigen_ellipse_color}}
\fi
\caption{特征向量和特征值的作用效果。
特征向量和特征值的作用效果的一个实例。
在这里,矩阵$\MA$有两个\gls{orthonormal}的特征向量,对应特征值为$\lambda_1$的$\Vv^{(1)}$以及对应特征值为$\lambda_2$的$\Vv^{(2)}$。
\emph{(左)}我们画出了所有的单位向量$\Vu\in\SetR^2$的集合,构成一个单位圆。
\emph{(右)}我们画出了所有的$\MA\Vu$点的集合。
通过观察$\MA$拉伸单位圆的方式,我们可以看到它将$\Vv^{(i)}$方向的空间拉伸了$\lambda_i$倍。 }
\label{fig:chap2_eigen_ellipse}
\end{figure}
% -- 41 --
矩阵的特征分解给了我们很多关于矩阵的有用信息。
矩阵是奇异的当且仅当含有零特征值。
实对称矩阵的特征分解也可以用于优化二次方程$f(\Vx) = \Vx^\top \MA \Vx$,其中限制$\norm{\Vx}_2 = 1$。
当$\Vx$等于$\MA$的某个特征向量时,$f$将返回对应的特征值。
在限制条件下,函数$f$的最大值是最大特征值,最小值是最小特征值。
所有特征值都是正数的矩阵被称为\firstgls{P_D};所有特征值都是非负数的矩阵被称为\firstgls{P_SD}。
同样地,所有特征值都是负数的矩阵被称为\firstgls{ND};所有特征值都是非正数的矩阵被称为\firstgls{NSD}。
\gls{P_SD}矩阵受到关注是因为它们保证$\forall \Vx, \Vx^\top \MA \Vx \geq 0$。
此外,\gls{P_D}矩阵还保证$\Vx^\top \MA \Vx =0 \Rightarrow \Vx = \mathbf{0}$。
\section{\glsentrytext{SVD}}
\label{sec:singular_value_decomposition}
在\secref{sec:eigendecomposition},我们探讨了如何将矩阵分解成特征向量和特征值。
还有另一种分解矩阵的方法,被称为\firstall{SVD},将矩阵分解为\firstgls{Svector}和\firstgls{Svalue}。
通过\gls{SVD},我们会得到一些与\gls{eigendecomposition}相同类型的信息。
然而,\gls{SVD}有更广泛的应用。
每个实数矩阵都有一个\gls{SVD},但不一定都有\gls{eigendecomposition}。
例如,非方阵的矩阵没有\gls{eigendecomposition},这时我们只能使用\gls{SVD}。
回想一下, 我们使用\gls{eigendecomposition}去分析矩阵$\MA$时, 得到特征向量构成的矩阵$\MV$和特征值构成的向量$\Vlambda$,我们可以重新将$\MA$写作
\begin{equation}
\MA=\MV\text{diag}(\Vlambda)\MV^{-1}.
\end{equation}
\gls{SVD}是类似的,只不过这回我们将矩阵$\MA$分解成三个矩阵的乘积:
\begin{equation}
\MA=\MU\MD\MV^\top.
\end{equation}
假设$\MA$是一个$m\times n$的矩阵,那么$\MU$是一个$m\times m$的矩阵,$\MD$是一个$m\times n$的矩阵,$\MV$是一个$n\times n$矩阵。
% -- 42 --
这些矩阵中的每一个经定义后都拥有特殊的结构。
矩阵$\MU$和$\MV$都定义为正交矩阵,而矩阵$\MD$定义为对角矩阵。
注意,矩阵$\MD$不一定是方阵。
对角矩阵$\MD$对角线上的元素被称为矩阵$\MA$的\firstgls{Svalue}。
矩阵$\MU$的列向量被称为\firstgls{left_Svector},矩阵$\MV$的列向量被称\firstgls{right_Svector}。
事实上,我们可以用与$\MA$相关的特征分解去解释$\MA$的\gls{SVD}。
$\MA$的\firstgls{left_Svector}是$\MA\MA^\top$的特征向量。
$\MA$的\firstgls{right_Svector}是$\MA^\top\MA$的特征向量。
$\MA$的非零奇异值是$\MA^\top\MA$特征值的平方根,同时也是$\MA\MA^\top$特征值的平方根。
\glssymbol{SVD}\,最有用的一个性质可能是拓展矩阵求逆到非方矩阵上。我们将在下一节中探讨。
\section{\glsentrytext{Moore}}
\label{sec:the_moore_penrose_pseudoinverse}
对于非方矩阵而言,其逆矩阵没有定义。
假设在下面的问题中,我们希望通过矩阵$\MA$的左逆$\MB$来求解线性方程,
\begin{equation}
\MA\Vx=\Vy
\end{equation}
等式两边左乘左逆$\MB$后,我们得到
\begin{equation}
\Vx=\MB\Vy.
\end{equation}
取决于问题的形式,我们可能无法设计一个唯一的映射将$\MA$映射到$\MB$。
如果矩阵$\MA$的行数大于列数,那么上述方程可能没有解。
如果矩阵$\MA$的行数小于列数,那么上述矩阵可能有多个解。
\firstgls{Moore}使我们在这类问题上取得了一定的进展。
矩阵$\MA$的伪逆定义为:
\begin{equation}
\MA^+ = \lim_{\alpha \searrow 0} (\MA^\top\MA + \alpha \MI)^{-1} \MA^\top.
\end{equation}
计算伪逆的实际算法没有基于这个定义,而是使用下面的公式:
\begin{equation}
\MA^+ = \MV\MD^+\MU^\top.
\end{equation}
其中,矩阵$\MU$,$\MD$和$\MV$是矩阵$\MA$\gls{SVD}后得到的矩阵。
对角矩阵$\MD$的伪逆$\MD^+$是其非零元素取倒数之后再转置得到的。
% -- 43 --
当矩阵$\MA$的列数多于行数时,使用伪逆求解线性方程是众多可能解法中的一种。
特别地,$\Vx=\MA^+\Vy$是方程所有可行解中欧几里得范数$\norm{\Vx}_2$最小的一个。
当矩阵$\MA$的行数多于列数时,可能没有解。
在这种情况下,通过伪逆得到的$\Vx$使得$\MA\Vx$和$\Vy$的欧几里得距离$\norm{\MA\Vx-\Vy}_2$最小。
\section{迹运算}
\label{sec:the_trace_operator}
迹运算返回的是矩阵对角元素的和:
\begin{equation}
\Tr(\MA)= \sum_i \MA_{i,i}.
\end{equation}
迹运算因为很多原因而有用。
若不使用求和符号,有些矩阵运算很难描述,而通过矩阵乘法和迹运算符号可以清楚地表示。
例如,迹运算提供了另一种描述矩阵\gls{frobenius_norm}的方式:
\begin{equation}
\norm{A}_F = \sqrt{\text{Tr}(\MA \MA^\top)}.
\label{eq:2.49}
\end{equation}
用迹运算表示表达式,我们可以使用很多有用的等式巧妙地处理表达式。
例如,迹运算在转置运算下是不变的:
\begin{equation}
\Tr(\MA)=\Tr(\MA^\top).
\end{equation}
多个矩阵相乘得到的方阵的迹,和将这些矩阵中的最后一个挪到最前面之后相乘的迹是相同的。
当然,我们需要考虑挪动之后矩阵乘积依然定义良好:
\begin{equation}
\Tr(\MA\MB\MC)=\Tr(\MC\MA\MB)= \Tr(\MB\MC\MA).
\end{equation}
或者更一般地,
\begin{equation}
\Tr(\prod_{i=1}^n \MF^{(i)})= \Tr(\MF^{(n)} \prod_{i=1}^{n-1} \MF^{(i)}).
\label{eq:2.52}
\end{equation}
即使循环置换后矩阵乘积得到的矩阵形状变了,迹运算的结果依然不变。
例如,假设矩阵$\MA\in \SetR^{m\times n}$,矩阵$\MB\in \SetR^{n\times m}$,我们可以得到
\begin{equation}
\Tr(\MA\MB)= \Tr(\MB\MA)
\end{equation}
尽管$\MA\MB \in \SetR^{m\times m}$和$\MB\MA \in \SetR^{n\times n}$。
% -- 44 --
另一个有用的事实是标量在迹运算后仍然是它自己:$a=\Tr(a)$。
\section{行列式}
\label{sec:the_determinant}
行列式,记作$\text{det}(\MA)$,是一个将方阵$\MA$映射到实数的函数。
行列式等于矩阵特征值的乘积。
行列式的绝对值可以用来衡量矩阵参与矩阵乘法后空间扩大或者缩小了多少。
如果行列式是$0$,那么空间至少沿着某一维完全收缩了,使其失去了所有的体积。
如果行列式是$1$,那么这个转换保持空间体积不变。
\section{实例:\glsentrytext{PCA}}
\label{sec:example_principal_components_analysis_chap2}
\firstall{PCA}是一个简单的机器学习算法,可以通过基础的线性代数知识推导。
假设在$\SetR^n$空间中我们有$m$个点$\{\Vx^{(1)}, \dots ,\Vx^{(m)}\}$,我们希望对这些点进行有损压缩。
有损压缩表示我们使用更少的内存,但损失一些精度去存储这些点。
我们希望损失的精度尽可能少。
一种编码这些点的方式是用低维表示。
对于每个点$\Vx^{(i)} \in \SetR^n$,会有一个对应的编码向量$\Vc^{(i)}\in \SetR^l$。
如果$l$比$n$小,那么我们便使用了更少的内存来存储原来的数据。
我们希望找到一个编码函数,根据输入返回编码,$f(\Vx)=\Vc$;我们也希望找到一个解码函数,给定编码重构输入,$\Vx\approx g(f(\Vx))$。
\glssymbol{PCA}~由我们选择的解码函数而定。
具体地,为了简化解码器,我们使用矩阵乘法将编码映射回$\SetR^n$,即$g(\Vc)=\MD\Vc$,其中$\MD\in \SetR^{n\times l}$是定义解码的矩阵。
% -- 45 --
目前为止所描述的问题,可能会有多个解。
因为如果我们按比例地缩小所有点对应的编码向量$c_i$,那么我们只需按比例放大$\MD_{:,i}$,即可保持结果不变。
为了使问题有唯一解,我们限制$\MD$中所有列向量都有\gls{unit_norm}。
计算这个解码器的最优编码可能是一个困难的问题。
为了使编码问题简单一些,\glssymbol{PCA}\,限制$\MD$的列向量彼此正交(注意,除非$l=n$,否则严格意义上$\MD$不是一个正交矩阵)。
为了将这个基本想法变为我们能够实现的算法,首先我们需要明确如何根据每一个输入$\Vx$得到一个最优编码$\Vc^*$。
一种方法是最小化原始输入向量$\Vx$和重构向量$g(\Vc^*)$之间的距离。
我们使用范数来衡量它们之间的距离。
在\,\glssymbol{PCA}\,算法中,我们使用$L^2$范数:
\begin{equation}
\Vc^* = \underset{\Vc}{\arg\min} \norm{\Vx-g(\Vc)}_2.
\end{equation}
我们可以用平方$L^2$范数替代$L^2$范数,因为两者在相同的值$\Vc$上取得最小值。
这是因为$L^2$范数是非负的,并且平方运算在非负值上是单调递增的。
\begin{equation}
\Vc^* = \argmin_{\Vc} \norm{\Vx - g(\Vc)}_2^2.
\end{equation}
该最小化函数可以简化成
\begin{equation}
(\Vx-g(\Vc))^\top(\Vx-g(\Vc))
\end{equation}
(\eqnref{eq:2.30}中$L^2$范数的定义)
\begin{equation}
= \Vx^\top\Vx - \Vx^\top g(\Vc) - g(\Vc)^\top\Vx + g(\Vc)^\top g(\Vc)
\end{equation}
(分配律)
\begin{equation}
= \Vx^\top \Vx - 2\Vx^\top g(\Vc) + g(\Vc)^\top g(\Vc)
\end{equation}
(因为标量$g(\Vc)^\top\Vx$的转置等于自己)
因为第一项$\Vx^\top\Vx$不依赖于$\Vc$,所以我们可以忽略它,得到如下的优化目标:
\begin{equation}
\Vc^* = \underset{\Vc}{\arg\min} - 2\Vx^\top g(\Vc) + g(\Vc)^\top g(\Vc).
\end{equation}
% -- 46 --
更进一步,我们代入$g(\Vc)$的定义:
\begin{equation}
\Vc^* = \underset{\Vc}{\arg\min} - 2\Vx^\top\MD\Vc + \Vc^\top\MD^\top\MD\Vc
\end{equation}
\begin{equation}
= \underset{\Vc}{\arg\min} -2\Vx^\top\MD\Vc + \Vc^\top\MI_l\Vc
\end{equation}
(矩阵$\MD$的正交性和单位范数约束)
\begin{equation}
= \underset{\Vc}{\arg\min} -2\Vx^\top\MD\Vc + \Vc^\top\Vc
\end{equation}
我们可以通过向量微积分来求解这个最优化问题(如果你不清楚怎么做,请参考\secref{sec:gradient_based_optimization})
\begin{gather}
\nabla_{\Vc} (-2\Vx^\top \MD \Vc + \Vc^\top\Vc) = 0\\
-2\MD^\top\Vx + 2\Vc = 0\\
\Vc = \MD^\top \Vx.
\end{gather}
这使得算法很高效:最优编码$\Vx$只需要一个矩阵-向量乘法操作。
为了编码向量,我们使用编码函数:
\begin{equation}
f(\Vx)=\MD^\top\Vx.
\end{equation}
进一步使用矩阵乘法,我们也可以定义\,\glssymbol{PCA}\,重构操作:
\begin{equation}
r(\Vx)=g(f(\Vx)) = \MD\MD^\top \Vx.
\label{eq:2.67}
\end{equation}
接下来,我们需要挑选编码矩阵$\MD$。
要做到这一点,我们回顾最小化输入和重构之间$L^2$距离的这个想法。
因为用相同的矩阵$\MD$对所有点进行解码,我们不能再孤立地看待每个点。
反之,我们必须最小化所有维数和所有点上的误差矩阵的\,\gls{frobenius_norm}:
\begin{equation}
\MD^* = \underset{\MD}{\arg\min} \sqrt{\sum_{i,j}\left( \Vx_j^{(i)} - r(\Vx^{(i)})_j\right)^2} \text{ subject to } \MD^\top\MD = \MI_l.
\label{eq:2.68}
\end{equation}
为了推导用于寻求$\MD^*$的算法,我们首先考虑$l=1$的情况。
在这种情况下,$\MD$是一个单一向量$\Vd$。
将\eqnref{eq:2.67}代入\eqnref{eq:2.68},简化$\MD$为$\Vd$,问题简化为
\begin{equation}
\Vd^* = \underset{\Vd}{\arg\min} \sum_i \norm{\Vx^{(i)} - \Vd\Vd^\top \Vx^{(i)}}_2^2
\text{ subject to } \norm{\Vd}_2 = 1.
\end{equation}
% -- 47 --
上述公式是直接代入得到的,但不是文体表述最舒服的方式。
在上述公式中,我们将标量$\Vd^\top\Vx^{(i)}$放在向量$\Vd$的右边。
将该标量放在左边的写法更为传统。
于是我们通常写作
\begin{equation}
\Vd^* = \underset{\Vd}{\arg\min} \sum_i \norm{\Vx^{(i)} - \Vd^\top \Vx^{(i)}\Vd}_2^2
\text{ subject to } \norm{\Vd}_2 = 1,
\end{equation}
或者,考虑到标量的转置和自身相等,我们也可以写作
\begin{equation}
\Vd^* = \underset{\Vd}{\arg\min} \sum_i \norm{\Vx^{(i)} - \Vx^{(i)\top}\Vd\Vd}_2^2
\text{ subject to } \norm{\Vd}_2 = 1.
\end{equation}
读者应该对这些重排写法慢慢熟悉起来。
此时,使用单一矩阵来重述问题,比将问题写成求和形式更有帮助。
这有助于我们使用更紧凑的符号。
将表示各点的向量堆叠成一个矩阵,记为$\MX\in\SetR^{m\times n}$,其中$\MX_{i,:}=\Vx^{(i)^\top}$。
原问题可以重新表述为:
\begin{equation}
\Vd^* = \underset{\Vd}{\arg\min} \norm{\MX - \MX\Vd\Vd^\top}_F^2
\text{ subject to } \Vd^\top \Vd = 1.
\end{equation}
暂时不考虑约束,我们可以将\,\gls{frobenius_norm}简化成下面的形式:
\begin{equation}
\underset{\Vd}{\arg\min} \norm{\MX - \MX \Vd\Vd^\top}_F^2
\end{equation}
\begin{equation}
= \underset{\Vd}{\arg\min} \, \Tr \left( \left( \MX - \MX \Vd\Vd^\top \right)^\top \left( \MX - \MX \Vd\Vd^\top \right) \right)
\end{equation}
(\eqnref{eq:2.49})
\begin{equation}
= \underset{\Vd}{\arg\min} \, \Tr \left( \MX^\top\MX - \MX^\top\MX \Vd\Vd^\top - \Vd\Vd^\top \MX^\top\MX + \Vd\Vd^\top \MX^\top\MX\Vd\Vd^\top \right)
\end{equation}
\begin{equation}
= \underset{\Vd}{\arg\min} \, \Tr( \MX^\top\MX) - \Tr(\MX^\top\MX \Vd\Vd^\top) - \Tr(\Vd\Vd^\top \MX^\top\MX) + \Tr(\Vd\Vd^\top \MX^\top\MX\Vd\Vd^\top)
\end{equation}
\begin{equation}
= \underset{\Vd}{\arg\min} \, - \Tr(\MX^\top\MX \Vd\Vd^\top) - \Tr(\Vd\Vd^\top \MX^\top\MX) + \Tr(\Vd\Vd^\top \MX^\top\MX\Vd\Vd^\top)
\end{equation}
(因为与$\Vd$无关的项不影响$\arg\min$)
\begin{equation}
= \underset{\Vd}{\arg\min} \, - 2\Tr(\MX^\top\MX \Vd\Vd^\top) + \Tr(\Vd\Vd^\top \MX^\top\MX\Vd\Vd^\top)
\end{equation}
(因为循环改变迹运算中相乘矩阵的顺序不影响结果,如\eqnref{eq:2.52}所示)
\begin{equation}
= \underset{\Vd}{\arg\min} \, - 2\Tr(\MX^\top\MX \Vd\Vd^\top) + \Tr(\MX^\top\MX\Vd\Vd^\top\Vd\Vd^\top )
\end{equation}
(再次使用上述性质)
% -- 48 --
此时,我们再来考虑约束条件:
\begin{equation}
\underset{\Vd}{\arg\min} \, - 2\Tr(\MX^\top\MX \Vd\Vd^\top) + \Tr(\MX^\top\MX\Vd\Vd^\top\Vd\Vd^\top )
\text{ subject to } \Vd^\top \Vd = 1
\end{equation}
\begin{equation}
= \underset{\Vd}{\arg\min} \, - 2\Tr(\MX^\top\MX \Vd \Vd^\top) + \Tr(\MX^\top\MX\Vd\Vd^\top )
\text{ subject to } \Vd^\top \Vd = 1
\end{equation}
(因为约束条件)
\begin{equation}
= \underset{\Vd}{\arg\min} \, - \Tr(\MX^\top\MX \Vd\Vd^\top)
\text{ subject to } \Vd^\top \Vd = 1
\end{equation}
\begin{equation}
= \underset{\Vd}{\arg\max} \, \Tr(\MX^\top\MX \Vd\Vd^\top)
\text{ subject to } \Vd^\top \Vd = 1
\end{equation}
\begin{equation}
= \underset{\Vd}{\arg\max} \, \Tr(\Vd^\top\MX^\top\MX \Vd)
\text{ subject to } \Vd^\top \Vd = 1 .
\end{equation}
这个优化问题可以通过特征分解来求解。
具体来讲,最优的$\Vd$是$\MX^\top\MX$最大特征值对应的特征向量。
以上推导特定于$l=1$的情况, 仅得到了第一个主成分。
更一般地,当我们希望得到主成分的基时,矩阵$\MD$由前$l$个最大的特征值对应的特征向量组成。
这个结论可以通过归纳法证明,我们建议将此证明作为练习。
线性代数是理解深度学习所必须掌握的基础数学学科之一。
另一门在机器学习中无处不在的重要数学学科是概率论,我们将在下一章探讨。
% -- 49 --