1.神经网络入门总结

常见激励(激活)函数

  1. ReLU (Rectifier Linear Unit,整流线性单元)

    神经网络中最常用的非线性函数

    数学形式: f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)
    1.神经网络入门总结_第1张图片

  2. ReLU6

    为了抵消ReLU的线性增长部分,会在min()中嵌入max(0,x)

    数学形式: f ( x ) = m i n ( 6 , m a x ( 0 , x ) ) f(x)=min(6,max(0,x)) f(x)=min(6,max(0,x))

    计算速度快,解决了梯度消失问题

    1.神经网络入门总结_第2张图片

  3. Sigmoid

    是最常用的连续 & 平滑的激励函数。也称为Logistic函数

    数学形式: f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1

    但是在训练过程中,反向传播项趋近于0,因此不怎么使用。

    Sigmoid有一个很好的性质: f ′ ( x ) = f ( x ) ∗ [ 1 − f ( x ) ] f'(x)=f(x)*[1-f(x)] f(x)=f(x)[1f(x)],因此大大简化了其梯度的计算。

    1.神经网络入门总结_第3张图片

  4. Tanh(双曲正切函数)

    和sigmoid有点相似,但是值域不同——tanh函数为(0,1),而sigmoid函数为(-1,1)

    数学形式: f ( x ) = e x − e − x e x + e − x = 1 − 2 e − x e x + e − x f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}=1-\frac{2e^{-x}}{e^x+e^{-x}} f(x)=ex+exexex=1ex+ex2ex

    1.神经网络入门总结_第4张图片

  5. Softsign

    softsign是符号函数的连续但不平滑的估计

    数学形式: f ( x ) = x ∣ x ∣ + 1 f(x)=\frac{x}{|x|+1} f(x)=x+1x

    1.神经网络入门总结_第5张图片

  6. Softplus

    softplus是ReLU函数的平滑版

    数学形式: f ( x ) = l o g ( e x + 1 ) f(x)=log(e^x+1) f(x)=log(ex+1)

    另外,当 x → ∞ , s o f t p l u s → ∞ , s o f t s i g n ( x ) → 1 x\to\infty,softplus\to \infty ,softsign(x)\to1 x,softplus,softsign(x)1

    x → − ∞ , s o f t p l u s → 0 , s o f t s i g n ( x ) → − 1 x\to{-\infty},softplus\to 0,softsign(x)\to-1 x,softplus0,softsign(x)1

    1.神经网络入门总结_第6张图片

  7. ELU(Exponetial Linear Unit ,指数线单元)

    ELU和softplus函数相似,不同点在于:

    x → − ∞ , s o f t p l u s → 0 , E L U ( x ) → − 1 x\to{-\infty},softplus\to 0,ELU(x)\to-1 x,softplus0,ELU(x)1

    数学形式:KaTeX parse error: No such environment: equation at position 7: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲f(x)=\begin{cas…

1.神经网络入门总结_第7张图片

常见损失函数

回归算法の损失函数——预测

  1. L1正则(MAE,平均绝对值误差)

    数学形式: M A E = 1 n ∑ i = 1 n ∣ y i − y p r e d i c t ∣ MAE=\frac{1}{n}\sum_{i=1}^n{|y_i-y_{predict}|} MAE=n1i=1nyiypredict

    优点:

    • 对异常值具有较好鲁棒性

    缺点:

    • 梯度不变是个严重问题,即使对于很小的损失,梯度也很大,不利于模型收敛,常使用变化的学习率解决
  2. L2正则(MSE,Mean Squared Error 均方误差)

    数学形式: M S E = 1 n ∑ i = 1 n ( y i − y p r e d i c t ) 2 MSE=\frac{1}{n}\sum_{i=1}^n{(y_i-y_{predict})^2} MSE=n1i=1n(yiypredict)2

    优点:

    • 计算方便,衡量误差较准确
    • 梯度随着误差增大或减小,收敛效果好
  3. Huber损失函数

    试图利用L1和L2正则来削减极值出的陡峭,使得目标值附近连续。

    表达式依赖于超参数 δ \delta δ(需要自己手动设定)

    数学形式:

    1.神经网络入门总结_第8张图片

分类算法の损失函数——分类

  1. Hinge损失函数

    主要用来评估支持向量机算法,有时用来评估神经网络算法

    数学形式:

    L ( y ) = m a x ( 0 , 1 − y p r e d i c t ∗ y ) L(y)=max(0,1-y_{predict}*y) L(y)=max(0,1ypredicty)

  2. Cross-entropy Loss(两类交叉熵损失函数/逻辑损失函数)

    有时也称为“逻辑损失函数”。

    当预测两类目标0 or 1时,希望度量预测值到真实值的距离,这个距离就可以用信息论中的交叉熵。

    数学形式:

    L ( y ) = ∑ i = 1 n [ − y i l o g ( y p r e d i c t ( i ) ) − ( 1 − y i ) l o g ( 1 − y p r e d i c t ( i ) ) ] L(y)=\sum_{i=1}^n{[-y_ilog(y_{predict(i)})-(1-y_i)log(1-y_{predict(i)})]} L(y)=i=1n[yilog(ypredict(i))(1yi)log(1ypredict(i))] y i ∈ { 0 , 1 } y_i\in\{0,1\} yi{ 0,1}

    1.神经网络入门总结_第9张图片

  3. Sigmoid交叉熵损失函数(Sigmoid cross entropy Loss with Logits)

    和楼上的函数不同,这个损失函数在楼上的基础上,将 y p r e d i c t ( i ) y_{predict(i)} ypredict(i)通过sigmoid函数包装,再计算交叉熵损失

    数学形式:

    L ( y ) = ∑ i = 1 n [ − y i l o g ( f ( y p r e d i c t ( i ) ) ) − ( 1 − y i ) l o g ( f ( 1 − y p r e d i c t ( i ) ) ) ] L(y)=\sum_{i=1}^n{[-y_ilog(f(y_{predict(i)}))-(1-y_i)log(f(1-y_{predict(i)}))]} L(y)=i=1n[yilog(f(ypredict(i)))(1yi)log(f(1ypredict(i)))]

    f ( x ) = s i g m o i d ( x ) = 1 1 + e − x f(x)=sigmoid(x)=\frac{1}{1+e^{-x}} f(x)=sigmoid(x)=1+ex1

  4. 加权交叉熵损失函数(Weighted cross entropy Loss with Logits)

    是Sigmoid交叉熵损失函数的加权,只对正目标加权(权重为 w e i g h t weight weight,需要自己手动设置)

    数学形式:

    L ( y ) = ∑ i = 1 n [ − y i l o g ( f ( y p r e d i c t ( i ) ) ) ∗ w e i g h t − ( 1 − y i ) l o g ( f ( 1 − y p r e d i c t ( i ) ) ) ] L(y)=\sum_{i=1}^n{[-y_ilog(f(y_{predict(i)}))*weight-(1-y_i)log(f(1-y_{predict(i)}))]} L(y)=i=1n[yilog(f(ypredict(i)))weight(1yi)log(f(1ypredict(i)))]

    f ( x ) = s i g m o i d ( x ) = 1 1 + e − x f(x)=sigmoid(x)=\frac{1}{1+e^{-x}} f(x)=sigmoid(x)=1+ex1

  5. Softmax交叉熵损失函数(Softmax cross entropy Loss)

    和前面有些许不一样,这个时候并不是“二分类问题”,而是”多分类问题“。

    因此这里稍微有点不一样:

    数学形式:

    对于最后一层的输出 z z z:该物品为种类i的概率: y p r e d i c t ( i ) = p i = s o f t m a x ( z ) = e z i ∑ k = 1 n u m c l a s s e z k y_{predict(i)=p_{i}}=softmax(z)=\frac{e^{z_i}}{\sum_{k=1}^{numclass}{e^{z_k}}} ypredict(i)=pi=softmax(z)=k=1numclassezkezi

    对于该物品预测的损失函数: L ( y ) = − ∑ j = 1 n u m c l a s s y j l o g ( p j ) L(y)=-\sum_{j=1}^{numclass}y_j{log(p_j)} L(y)=j=1numclassyjlog(pj)(只会有一个 y j y_j yj为1,其余都为0)

  6. 稀疏Softmax交叉熵损失函数(Sparse Softmax cross entropy Loss )

    和上一个损失函数差不多,获得的结果也差不多,但是训练的标签向量必须是one-hot encode(独热码)

Mini-batch

​ Mini-batch的思想是一次训练数据集的一小部分,而不是整个数据集。

​ 方法是——对数据进行随机混洗,然后创建mini-batches。对每个Mini-batch,都使用梯度下降训练网络权重(实际上是在对每个batch进行SGD[随机梯度下降]的操作)

​ 假设在一个batch里面,有 N N N个样本。

​ 所以结合前面的介绍,一个batch的平均损失函数应该为: L o s s = − 1 N ∑ k = 1 N L k ( y ) Loss=-\frac{1}{N}\sum_{k=1}^N L_k(y) Loss=N1k=1NLk(y),用平均损失函数来进行权重更新。

最优化

所谓最优化,就是学习到让损失函数 L o s s Loss Loss最小的一系列权重矩阵。

寻找权重,得沿着损失函数的梯度下降的方向,进行更新,得到局部最小值(凸函数为最小值)。

方法:

  • 数值微分

    根据导数(梯度)的定义:

    d f ( x ) d x = l i m h → 0 f ( x + h ) − f ( x ) h \frac{df(x)}{dx}=lim_{h\to 0}\frac{f(x+h)-f(x)}{h} dxdf(x)=limh0hf(x+h)f(x)

    实际上我们使用中心差值公式更好:

    d f ( x ) d x = l i m h → 0 f ( x + h ) − f ( x − h ) 2 h \frac{df(x)}{dx}=lim_{h\to 0}\frac{f(x+h)-f(x-h)}{2h} dxdf(x)=limh02hf(x+h)f(xh)

def eval_numerical_gradient(f,x):
    h=0.00001	#1e-5
    return (f(x+h)-f(x-h))/(2*h)
  • 手动求导(梯度)

反向传播(重在理解)

网络中上层的值是由下层的值计算决定的,因此当上层一个结点 w w w L o s s w = l Loss_w=l Lossw=l时,下层结点 v v v就要对 L o s s w Loss_w Lossw负相应权重的责任,因此下层结点 v v v L o s s Loss Loss L o s s v = L o s s w ∗ W u , v Loss_v=Loss_w*W_{u,v} Lossv=LosswWu,v。因此,结点 v v v的值更新为 V a l u e v ′ = V a l u e v − L o s s v ∗ g r a d v Value_v'=Value_v-Loss_v*grad_v Valuev=ValuevLossvgradv(沿着梯度反向更新, g r a d v grad_v gradv取决与上层下层间使用的激活(励)函数)

基于测试集的评价

这里有三个概念:

  • batchsize(批处理大小):每次SGD(随机梯度下降)训练,即每次训练都在训练集中选batchsize 个样本进行训练 。
  • iteration:使用batchsize个样本训练一次。
  • epoch:一个完整的数据集通过了神经网络并且返回了一次,的过程。

正则化(Regularization)

​ 直译过来为“规则化”,希望模型学习到的规则更加“稳定”,避免预测一些离奇的结果。

​ 正则化的目的就是——希望在尽量不影响,原模型和数据集之间损失的前提下,使得模型权重变小(权重的减小,自然让模型的输出波动最小,从而更稳定),而正则化项的设计就是这个原理。

​ 严格的数学形式:

L o s s = 1 2 ∑ i = 1 n { t n − W T ϕ ( X n ) } 2 + λ q ∑ j = 1 M ∣ w j ∣ q Loss=\frac{1}{2}\sum_{i=1}^{n}\{t_n-W^T\phi(X_n)\}^2+\frac{\lambda}{q}\sum_{j=1}^M|w_j|^q Loss=21i=1n{ tnWTϕ(Xn)}2+qλj=1Mwjq

​ 其中:

  • 前半部分是一个标准的L2损失函数:

    • t n t_n tn:训练的真实输出
    • W W W:权重矩阵
    • ϕ ( x ) \phi(x) ϕ(x):激活函数
  • 后半部分为正则化项:

    • λ \lambda λ:正则化系数, λ \lambda λ越大,限制越强
    • q q q q q q 1 1 1被称为L1正则化,取 2 2 2被称为L2正则化

你可能感兴趣的:(深度学习之神经网络基础,机器学习,深度学习)