机器学习:人工提取特征;深度学习:自动提取特征
深度学习=大数据+高计算能力
寻找一个可以拟合数据的函数,通过损失函数(代价函数)对拟合程度进行评估,使用最优化方法求得损失函数的最小值
深度深度网络(DNN):输入、隐藏层1、隐藏层2、…输出层,都是全连接层
欠拟合:模型复杂度无法匹配数据量(数据过多,但模型过于简单)
过拟合:数据量无法匹配模型复杂度(模型比较复杂,可以train比较大的数据集,但数据较少)
可从以下可变条件进行优化:
-
激活函数:最经典的Sigmoid函数,及它的变体Tanh函数,但容易导致梯度消失,到后来最常用的ReLU函数及其各种变体(Leaky ReLU、pReLU等),还有可学习的激活函数Maxout函数(ReLU为其一个特例)
-
优化器:最经典的SGD算法(随机梯度下降),为了减少计算量,改良为mini-batch随机梯度下降法(MBGD算法);后来为了避免saddle point(鞍点)和local minima(局部最小值),出现动量梯度下降。针对学习率,还出现了自适应学习率的算法,如Adagrad、RMSProp和Adam
https://blog.csdn.net/tcn760/article/details/123965374
以上的优化都是为了使机器在训练集train set上训练得更快更好,降低train error,但随着train epoch的增加,train error会越来越小,而这样train出来的目标函数,在测试集test set上的表现却并不会越来越好,其test error从一开始的下降,在跃过某一个epoch后,反而会开始上升,这就是出现了过拟合现象,函数泛化能力变差。为解决过拟合问题,可用以下方法进行优化: -
Early Stopping:让模型在训练提升不大后及时停止
-
Regularization正则化:正则化技术分为L1正则化、L2正则化和Dropout
L2正则化用的比较多,在损失函数中加入L2正则项,如下:
L ( θ ) = L ( θ ) + λ ∑ i n θ i 2 C = C 0 + λ 2 n ∑ i w i 2 w → w − η ( ∂ C 0 ∂ w + λ n w ) = ( 1 − η λ n ) w − η ∂ C 0 ∂ w L(\theta)=L(\theta)+\lambda\sum_i^n\theta_i^2\\ C=C_0+\frac{\lambda}{2n}\sum_iw_i^2\\ w\rightarrow w-\eta(\frac{\partial C_0}{\partial w}+\frac{\lambda}{n}w)=(1-\frac{\eta\lambda}{n})w-\eta\frac{\partial C_0}{\partial w} L(θ)=L(θ)+λi∑nθi2C=C0+2nλi∑wi2w→w−η(∂w∂C0+nλw)=(1−nηλ)w−η∂w∂C0
L1正则化,在损失函数中加入L1正则项:
L ( θ ) = L ( θ ) + λ ∑ i n ∣ θ i ∣ C = C 0 + λ n ∑ i ∣ w i ∣ w → w − λ η n s g n ( w ) − η ∂ C 0 ∂ w L(\theta)=L(\theta)+\lambda\sum_i^n|\theta_i|\\ C=C_0+\frac{\lambda}{n}\sum_i|w_i|\\ w\rightarrow w-\frac{\lambda\eta}{n}sgn(w)-\eta\frac{\partial C_0}{\partial w} L(θ)=L(θ)+λi∑n∣θi∣C=C0+nλi∑∣wi∣w→w−nληsgn(w)−η∂w∂C0
可以看到,L1正则化中w的变化是减去一个定值,而L2正则化则是一个线性变化,对于较大的参数来说,L1正则化并不适合,所以在深度学习在用的比较多的是L2正则化。
Dropout是随机地以概率p丢掉任意一个神经元
- 将数据集划分为训练集train set、验证集validate set和测试集test set,目标函数在训练集上train出来后,先在验证集上进行调整后再应用在测试集上
- 数据增强:将原始图像经过各种处理得到增强图像,使模型的训练数据集增大到可以匹配模型复杂度
- 批量归一化(batch normalization):将卷积神经网络的每层之间加上将神经元的权重调成标准正态分布的正则化层,这样可以让每一层的训练都从相似的起点出发,而对权重进行拉伸,等价于对特征进行拉伸,在输入层等价于数据增强。注意正则化层是不需要训练。