本章提要
深度学习可以在较少参数量的情况下得到比较低的loss: h a l l = a r g min h ∈ H L ( h , D a l l ) h^{all}=arg \min_{h \in H}L(h,D_{all}) hall=argminh∈HL(h,Dall)
引入
如何权衡模型的复杂程度 Tradeoff of Model Complexity
理论上,理想与现实接近的方法
- 增加训练样本数量,N越大 D t r a i n D_{train} Dtrain越接近 D a l l D_{all} Dall, P ( D t r a i n i s b a d ) P(D_{train} \ is \ bad) P(Dtrain is bad)的概率越小。
- 减少模型复杂性,|H|候选项的数目越小, P ( D t r a i n i s b a d ) P(D_{train} \ is \ bad) P(Dtrain is bad)的概率越小。
矛盾点
数据集中样本的数量N我们难以控制,为了理想和现实比较接近,选了一个较小的|H|。|H|太小,能选择的h数量太少,可能找不到使 L ( h , D a l l ) L(h,D_{all}) L(h,Dall)最小的h。(大海捞针,针不在大海)
|H|较大,可以找到使 L ( h , D a l l ) L(h,D_{all}) L(h,Dall)最小的h,但是这样理想和现实的差距比较明显。
在H中找出一个h使得 L ( h , D a l l ) L(h,D_{all}) L(h,Dall)最小,把这个h称为 h a l l h^{all} hall: h a l l = a r g min h ∈ H L ( h , D a l l ) h^{all}=arg \min_{h \in H}L(h,D_{all}) hall=argminh∈HL(h,Dall)
=> 最优情况(H很小但又可以让L很低):如果可以找到一个H ① H is Small ,很少的候选成员 ② 成员h都是精英,可以让Loss很低
=> 问题:深度学习如何做到这件事的?
Why Hidden Layer?
核心: 可以通过一个Hidden Layer
制造出所有可能的function
隐藏层 (Hidden Layer)是人工神经网络中的中间层,位于输入层和输出层之间。它的作用是对输入数据进行特征提取和变换,为最终的输出层提供高层次特征。
隐藏层的主要任务是通过线性变换和激活函数来捕捉数据中的复杂模式和特征。
怎么找一个function(network)来逼近随便画的一条线? => 可以用Piecewise Linear Curves逼近任何连续曲线
- 先将这条线分段,然后将每个分段的端点连接起来,得到分段函数(图中绿色的线) ,使用这个分段函数来逼近原来的黑线。
在这个案例中可能绿色的线不是很逼近黑色的线,但可以直觉的想如果分段分的越细,那么就绿色的线越接近黑色的线。
-
可以使用一个
hidden layer
的neural network
轻易制造出绿色的线。使用一个常数项+一堆阶梯型的function制造绿色的线。观察发现:绿色的线=常数项+一堆特定形状的蓝色function(这里的特定形状指的是图上蓝色function的形状) => 任何的function都可以`hidden layer的neural network制造出来
- 怎么表示阶梯型的function(蓝色的线)呢?
- 方法1:使用
Sigmoid Function
逼近蓝色的线。
- 方法1:使用
蓝色的线也称为hard Sigmoid Function
Sigmoid Function
(S形函数): y = c 1 1 + e − ( b + w x 1 ) = c s i g m o i d ( b + w x 1 ) y = c\frac{1}{{1+e^{-(b+wx_1)}}} = c\;sigmoid(b+wx_1) y=c1+e−(b+wx1)1=csigmoid(b+wx1)
2. 方法2:使用`ReLU`Rectified Linear Unit线性整流单元(两个水平线有一个转折点)表示`Hard Sigmoid`
每一个hard sigmoid
可以使用两个线性整流单元Rectified Linear Unit
(ReLU)叠加
总结
方式1:使用sigmoid function
- hidden layer里每一个neural都可以制造出一个阶梯型的function
- 把不同的sigmoid function加起来再加上常数项就可以得到绿色的线
- 任何的Piecewise Linear Curves去逼近任何function
neural network选择的activation function 是sigmoid,hidden layer通过设定不同的$ w,b $制造出不同的sigmoid function
方式2:使用ReLU,hidden layer里每一个neural选择的激活函数是ReLU
问题引出:深度学习效果更好
每一列Neural
叫做一个hidden layer
,很多hidden layer
被叫做Deep
,这一套技术被叫做Deep Learning
深度学习
有一层hidden layer的neural可以产生任何的function,那为什么还要搞deep network(多层hidden layer)?
直觉:当Layer越叠越越深的时候,参数量越多,模型越复杂,理想越来越好。如果有足够的训练资料那么理想和现实也不会差太多。 => 所以深度学习需要很多的资料
这里的直觉只是我们通常这么认为,但不一定正确
问题:当参数量一样(未知参数量一样)的时候,Fat+Short的网络和Thin+Tall的网络谁的效果更好?
实验表明:Thin+Tall的网络效果更好
为什么深度学习效果更好?
虽然一层hidden layer的neural可以产生任何的function,但往往用一个deep的架构更有效率。
:::tips
deep learing的核心:产生同一个function,使用deep的架构需要的参数量更少,可能需要较少的训练资料就可以了(不容易overfitting)。
:::
误解:大模型很多个layer增加了参数,如果没有足够的data,就会产生overfitting。
原因探究:为什么deep?
类别案例
当剪窗花时,直接剪操作很复杂,但如果折起来剪比较有效率。
这里将纸对折的事情可以类比为deep learning里hidden layer做的事情。
当把一个network deep的时候会发生什么
一层的neural
一层的network里包含了两个neural,输入为x,输出为 a 1 a_1 a1,采用的激活函数为ReLU。
假设参数已知,第一个neural的weight=1,bias=-0.5;第二个neural的weight=-1,bias=0.5。所以进入neural的x分别为x-0.5
与-x+0.5
。
第一个neural:当输入x>0.5
时,输出=2*输入。当输入x<0.5
时,输出为0。
第二个neural:当输入x<0.5
时,输出=2*输入。当输入x>0.5
时,输出为0。
结合起来就可以得到输入的x和输出 a 1 a_1 a1之间的关系。
第二层的neural
将 a 1 + b i a s a_1+bias a1+bias,这里的bias设置为-0.5。
第二层第一个neural输入为 a 1 − 0.5 a_1-0.5 a1−0.5,放入一个ReLU
第二次第二个neural输入为 − a 1 + 0.5 -a_1+0.5 −a1+0.5,放入一个ReLU
可以很容易知道 a 1 a_1 a1和 a 2 a_2 a2的关系和 x x x和 a 1 a_1 a1的关系一致。
x从0->0.5
时, a 1 a_1 a1从1->0
, a 2 a_2 a2从1->0->1
x从0.5->1
时, a 1 a_1 a1从0->1
, a 2 a_2 a2从1->0->1
这里从课堂上的讲法来说,只有当neural的输出2才会有这个结果,所以弹幕说的老师课后更正应该是正确的。两个ReLu的结果2再求和得到输出。
第三层的neural
a 2 a_2 a2和 a 3 a_3 a3的关系 = a 1 a_1 a1和 a 2 a_2 a2的关系 = x x x和 a 1 a_1 a1的关系。、
使用同样的思路,可以得到 x x x与 a 3 a_3 a3的关系
以此类推
使用deep network输入x与输出y的关系:如果有k层layers,每层有两个neural,总共 2 k 2k 2k个neural,那么输出的y有 2 k 2^k 2k个线段。 => 参数量小,比较简单的模型
使用一个shallow network表示同样的关系:每一个neural只能制造一个线段, 2 k 2^k 2k个线段需要 2 k 2^k 2k个neural。 => 参数量大,比较复杂的模型,复杂的模型更容易overfitting,所以需要更多的资料
如果目标的function是复杂(也不用太复杂)且有规律的(音像、语音),那么deep network优于shallow network