智能计算系统(学习笔记)-第二章神经网络
课程: (智能计算系统第二章)地址
第二章神经网络
- 从机器学习到神经网络
- 符号说明:
- 线性-回归regression:最基础的机器学习
- 一元线性回归
- 多元线性回归
- 评价拟合的好坏
- 神经网络的发展
- 人工神经元
- 感知机模型
- 寻找损失函数
- 神经网络训练的基本原理
- 两层神经网络-多层感知机
- 深度神经网络的成功:ABC
- 神经网络的模型训练
- 正向传播
- 初始化权重值[随机/直接赋值]
- 输入到隐层计算
- 隐层到输出层计算
- 反向传播
- 计算误差(损失函数)
- 隐层到输出层的权值W(2)W^{(2)}W(2)的更新
- 根据偏导数的链式法则推导
- (假设)更新w2,1(2)w_{2,1}^{(2)}w2,1(2)的权重
- 神经网络设计原则
- 调整网络的拓扑结构
- 选择合适的激活函数
- Sigmoid函数
- tanh函数
- ReLU函数
- Leaky ReLU函数->PReLU函数
- ELU函数(Exponential Linear Unit)
- 选择合适的损失函数
- 均方差损失函数+Sigmoid激活函数
- 交叉熵损失函数+Sigmoid激活函数
- 过拟合与正则化
- L2L^2L2正则化
- L1L^1L1正则化->稀疏化(系统所有权重趋近0)
- Bagging集成方法
- Dropout正则化
- 其他正则化方法
- 交叉验证
- 最简单的验证方式[划分]
- Leave-one-out cross-validation验证方法
- K-折交叉验证
- 小结
从机器学习到神经网络
包含关系:人工智能【机器学习【神经网络【深度学习】】】
机器学习:通过计算手段,利用经验改善计算系统性能(算法)的研究
符号说明:
输入数据:xxx
真实值(实际值):yyy
计算值(模型预测值):y^\hat{y}y^
模型函数:H(x)H(x)H(x)
激活函数:G(x)G(x)G(x)
损失函数:L(x)L(x)L(x)(预测与真实的差别)
标量:斜体小写:a,b,c
向量:黑斜体小写:a,b,c
矩阵:黑斜体大写:A,B,C
线性-回归regression:最基础的机器学习
特征是xxx,模型(假设)是H(x)H(x)H(x)
一元线性回归
单变量线性模型是Hw(x)=w0+wx\mathop{H}_w(x)=\mathop{w}_0+wxHw(x)=w0+wx
多元线性回归
多变量线性模型是Hw(x)=w0+w1x1+w2x2\mathop{H}_w(x)=\mathop{w}_0+\mathop{w}_1\mathop{x}_1+\mathop{w}_2\mathop{x}_2Hw(x)=w0+w1x1+w2x2
n个特征-向量化:Hw(x)=∑i=0nwixi=w^Txi\mathop{H}_w(x)=\sum\limits_{i=0}^n\mathop{w}_i\mathop{x}_i=\hat{w}^T\mathop{x}_iHw(x)=i=0∑nwixi=w^Txi
w^=[w0;w1;...;wn]x=[x0;x1;...;xn],x0=1\hat{w}=[w_0;w_1;...;w_n] \quad x=[x_0;x_1;...;x_n],x_0=1w^=[w0;w1;...;wn]x=[x0;x1;...;xn],x0=1
评价拟合的好坏
- y^\hat{y}y^与yyy之间的误差ε=y−y^=y−w^Tx\varepsilon=y-\hat{y}=y-\hat{w}^Txε=y−y^=y−w^Tx
ε\varepsilonε满足N(0,σ2)N(0,\sigma^2)N(0,σ2)的高斯分布:p(ε)=12πσexp(−ε22σ2)p(\varepsilon)=\frac{1}{\sqrt{2\pi}\sigma} \exp(-\frac{\varepsilon^2}{2\sigma^2})p(ε)=2πσ1exp(−2σ2ε2)
也就是p(y∣x;w^)=12πσexp(−(y−w^Tx)22σ2)p(y|x;\hat{w})=\frac{1}{\sqrt{2\pi}\sigma} \exp(-\frac{(y-\hat{w}^Tx)^2}{2\sigma^2})p(y∣x;w^)=2πσ1exp(−2σ2(y−w^Tx)2) - 通过最大似然函数,得到误差值的极小值⟹\implies⟹求出参数w^\hat{w}w^,使得损失函数L(w^)L(\hat{w})L(w^)的取值最小
损失函数L(w^)=12∑j=1m(Hw(xj)−yj)2=12∑j=1m(w^Tx−yj)2L(\hat{w})=\frac{1}{2}\sum\limits_{j=1}^{m}(H_w(x_j)-y_j)^2=\frac{1}{2}\sum\limits_{j=1}^{m}(\hat{w}^Tx-y_j)^2L(w^)=21j=1∑m(Hw(xj)−yj)2=21j=1∑m(w^Tx−yj)2 - 迭代法(梯度下降法)寻找参数
初试设定一个随机向量w^\hat{w}w^
沿着梯度下降的方向进行迭代,使更新后的L(w^)L(\hat{w})L(w^)不断变小
w^=w^−α∂L(w^)∂w^\hat{w}=\hat{w}-\alpha\frac{\partial L(\hat{w})}{\partial \hat{w}}w^=w^−α∂w^∂L(w^)
α\alphaα是学习率/步长
迭代至使得损失函数L(w^)L(\hat{w})L(w^)最小的w^\hat{w}w^,w^\hat{w}w^就是回归模型的参数
神经网络的发展
人工神经元
包含输入(生物神经元的树突),输出(轴突)与计算功能(细胞体)的模型
感知机模型
模型参数是(w,b)({w},b)(w,b)
模型:H(x)=sign(wTx+b)H(x)=sign(w^Tx+b)H(x)=sign(wTx+b),对应一个超平面wTx+b=0w^Tx+b=0wTx+b=0
模型的目标:找到一个(w,b)(w,b)(w,b)将线性可分的数据集T的所有样本点正确地分为两类
sign(x)={+1x≥0−1x<0⟹sign(x)=\begin{cases} +1 &x\geq0 \\ -1 &x<0 \end{cases}\impliessign(x)={+1−1x≥0x<0⟹寻找损失函数,并使得损失函数最小化
寻找损失函数
1.考虑一个训练数据集D={(x1,y1),(x2,y2),...,(xm,ym)}D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}D={(x1,y1),(x2,y2),...,(xm,ym)}其中xj∈Rn,yj∈{+1,−1}x_j\isin{R^n},y_j\isin\{+1,-1\}xj∈Rn,yj∈{+1,−1}
2.如果存在超平面(wTx+b=0)(w^Tx+b=0)(wTx+b=0),将正负样本分离,说明数据集线性可分,需要求超平面的表达式。
3.策略:假设无分类的数据集M,利用误分类到超平面的总距离来寻找损失函数(找总距离最小值)
4.设定样本点xix_ixi到超平面的距离是欧氏距离:d=1∣∣w∣∣∣wTxj+b∣d=\frac{1}{||w||}|w^Tx_j+b|d=∣∣w∣∣1∣wTxj+b∣ (∣∣w∣∣||w||∣∣w∣∣是w的L2范数)
范数
- L1范数:是指向量中各个元素绝对值之和
L1范数公式:∣∣a⃗∣∣1=∑in∣ai∣||\vec{a}||_1=\sum\limits_i^n|a_i|∣∣a∣∣1=i∑n∣ai∣ - L2范数:欧几里得范数,可以认为是空间中两个点间的距离,为向量所有元素的平方和的开平方
欧几里得范数Euclidean norm=欧式长度 =L2 范数=L2距离
Euclidean norm=Euclidean length= L2 norm = L2 distance/norm
L2范数公式:∣∣a⃗∣∣2=∑in(ai)2||\vec{a}||_2=\sqrt{\sum\limits_i^n(a_i)^2}∣∣a∣∣2=i∑n(ai)2
5.容易知道误分类点满足条件:−yj(wTxj+b)>0-y_j(w^Tx_j+b)>0−yj(wTxj+b)>0
所以去掉欧氏距离的绝对值: d=1∣∣w∣∣yj(wTxj+b)d=\frac{1}{||w||}y_j(w^Tx_j+b)d=∣∣w∣∣1yj(wTxj+b)
7.累加所有误分类样本点: d=1∣∣w∣∣∑xj∈Myj(wTxj+b)d=\frac{1}{||w||}\sum\limits_{x_j\isin M}y_j(w^Tx_j+b)d=∣∣w∣∣1xj∈M∑yj(wTxj+b)
于是去掉常数1∣∣w∣∣\frac{1}{||w||}∣∣w∣∣1得到感知机的损失函数:L(w,b)=−∑xj∈Myj(wTxj+b)L(w,b)=-\sum\limits_{x_j\isin M}y_j(w^Tx_j+b)L(w,b)=−xj∈M∑yj(wTxj+b)
8.最优化采用随机梯度下降法:随机选一个误分类的点,分别求对w,bw,bw,b的偏导,以α\alphaα为步长进行更新,迭代使得损失函数不断减小,直到0。(L(w,b))⇢0(L(w,b))\dashrightarrow 0(L(w,b))⇢0
对www的偏导:
▽wL(w,b)=−∑xj∈Myjxj⟹w←w+αyjxj\bigtriangledown_wL(w,b)=-\sum\limits_{x_j\isin M}y_jx_j \implies w\gets w+\alpha y_jx_j▽wL(w,b)=−xj∈M∑yjxj⟹w←w+αyjxj
对bbb的偏导:
▽bL(w,b)=−∑xj∈Myj⟹b←b+αyj\bigtriangledown_bL(w,b)=-\sum\limits_{x_j\isin M}y_j \implies b\gets b+\alpha y_j▽bL(w,b)=−xj∈M∑yj⟹b←b+αyj
神经网络训练的基本原理
(正向传播,反向传播)的训练/计算过程
两层神经网络-多层感知机
将大量的神经元模型进行组合,用不同的方法进行连接并作用在不同的激活函数上,就构成了人工神经网络模型。多层感知机一般指全连接的两层神经网络模型。
x−>h=G(w(1)T,x)−>y^=G(w(2)T,h)[G是激活函数]x->h=G(w^{(1)^T},x)-> \hat{y}=G(w^{(2)^T},h) \space [G是激活函数]x−>h=G(w(1)T,x)−>y^=G(w(2)T,h) [G是激活函数]
- 神经网络的参数:权重www , 偏置bbb
x−>h=G(w(1)Tx+b1)−>y^=G(w(2)Th+b2)x->h=G(w^{(1)^T}x+b_1)-> \hat{y}=G(w^{(2)^T}h+b_2)x−>h=G(w(1)Tx+b1)−>y^=G(w(2)Th+b2) - 特点:数据量小,训练快,对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到制约。【Kurt Hornik证明理论上两层神经网络足以拟合任意函数】
- 于是2006年开启多层神经网络{深度学习}
深度神经网络的成功:ABC
A:Algorithm,算法不断优化(学习算法->BP算法->Pre-training/Dropout)
B:Big data,数据量变大(10->10K->100M)
C:Computing,处理器算力提升(晶体管->CPU->集群/GPU->智能处理器)
增加隐层
- 隐层的抽象深入
随着网络的层数增加,每一层对于前一层次的抽象表示更深入,每一层神经元学习到的是前一层神经元更抽象的表示
通过抽取更抽象的特征来对事物进行区分,获得更好的区分与分类能力
例如:第一个隐层(边缘特征)->第二个隐层(形状特征)->第三个隐层(图案特征)->第四个隐层(目标特征) - 增强非线性拟合[网络层数的增加,激活函数的调整等](演变如下图)
神经网络的模型训练
正向传播
正向传播=推断,是根据输入,经过权重、激活函数计算出隐层,将输入的特征向量从低级特征逐步提取为抽象特征,直到得到最终输出结果的过程
sign就是01判断,不适合非线性sign就是01判断,不适合非线性sign就是01判断,不适合非线性
sigmoid是关于指数函数的倒数,可用于非线性sigmoid是关于指数函数的倒数,可用于非线性sigmoid是关于指数函数的倒数,可用于非线性
- 假定输入数据:x1=0.02,x2=0.04,x3=0.01x_1=0.02,x_2=0.04,x_3=0.01x1=0.02,x2=0.04,x3=0.01
- 固定偏置:b1=0.4,b2=0.7b_1=0.4,b_2=0.7b1=0.4,b2=0.7
- 期待输出:y1=0.9,y2=0.5y_1=0.9,y_2=0.5y1=0.9,y2=0.5
- 未知权重:w(1)=[w1,1(1)w1,2(1)w1,3(1)w2,1(1)w2,2(1)w2,3(1)w3,1(1)w3,2(1)w3,3(1)],w(2)=[w1,1(1)w1,2(1)w2,1(1)w2,2(1)w3,1(1)w3,2(1)]w^{(1)}=\begin{bmatrix} w_{1,1}^{(1)} & w_{1,2}^{(1)} & w_{1,3}^{(1)} \\ w_{2,1}^{(1)} & w_{2,2}^{(1)} & w_{2,3}^{(1)} \\ w_{3,1}^{(1)} & w_{3,2}^{(1)} & w_{3,3}^{(1)} \end{bmatrix},\space w^{(2)}=\begin{bmatrix} w_{1,1}^{(1)} & w_{1,2}^{(1)} \\ w_{2,1}^{(1)} & w_{2,2}^{(1)} \\ w_{3,1}^{(1)} & w_{3,2}^{(1)} \end{bmatrix}w(1)=⎣⎢⎡w1,1(1)w2,1(1)w3,1(1)w1,2(1)w2,2(1)w3,2(1)w1,3(1)w2,3(1)w3,3(1)⎦⎥⎤, w(2)=⎣⎢⎡w1,1(1)w2,1(1)w3,1(1)w1,2(1)w2,2(1)w3,2(1)⎦⎥⎤
- 目的是为了能得到y1=0.9,y2=0.5y_1=0.9,y_2=0.5y1=0.9,y2=0.5的期望值,需要计算出合适的w(1),w(2)w^{(1)},w^{(2)}w(1),w(2)的权重值。
初始化权重值[随机/直接赋值]
w(1)=[w1,1(1)w1,2(1)w1,3(1)w2,1(1)w2,2(1)w2,3(1)w3,1(1)w3,2(1)w3,3(1)]=[0.250.150.300.250.200.350.100.250.15]w^{(1)}=\begin{bmatrix} w_{1,1}^{(1)} & w_{1,2}^{(1)} & w_{1,3}^{(1)} \\ w_{2,1}^{(1)} & w_{2,2}^{(1)} & w_{2,3}^{(1)} \\ w_{3,1}^{(1)} & w_{3,2}^{(1)} & w_{3,3}^{(1)} \end{bmatrix}=\begin{bmatrix} 0.25 & 0.15 & 0.30 \\ 0.25 & 0.20 & 0.35 \\ 0.10 & 0.25 & 0.15 \end{bmatrix}w(1)=⎣⎢⎡w1,1(1)w2,1(1)w3,1(1)w1,2(1)w2,2(1)w3,2(1)w1,3(1)w2,3(1)w3,3(1)⎦⎥⎤=⎣⎡0.250.250.100.150.200.250.300.350.15⎦⎤
w(2)=[w1,1(2)w1,2(2)w2,1(2)w2,2(2)w3,1(2)w3,2(2)]=[0.400.250.350.300.010.35]w^{(2)}=\begin{bmatrix} w_{1,1}^{(2)} & w_{1,2}^{(2)} \\ w_{2,1}^{(2)} & w_{2,2}^{(2)} \\ w_{3,1}^{(2)} & w_{3,2}^{(2)} \end{bmatrix}=\begin{bmatrix} 0.40 & 0.25 \\ 0.35 & 0.30 \\ 0.01 & 0.35 \end{bmatrix}w(2)=⎣⎢⎡w1,1(2)w2,1(2)w3,1(2)w1,2(2)w2,2(2)w3,2(2)⎦⎥⎤=⎣⎡0.400.350.010.250.300.35⎦⎤
输入到隐层计算
v=[v1v2v3]=w(1)Tx+b1=[0.250.150.300.250.200.350.100.250.15][0.020.040.01]+0.4=[0.4160.41350.4215]v=\begin{bmatrix} v_1 \\ v_2 \\ v_3 \end{bmatrix}=w^{(1)^T}x+b_1=\begin{bmatrix} 0.25 & 0.15 & 0.30 \\ 0.25 & 0.20 & 0.35 \\ 0.10 & 0.25 & 0.15 \end{bmatrix}\begin{bmatrix} 0.02 \\ 0.04 \\ 0.01 \end{bmatrix}+0.4=\begin{bmatrix} 0.416 \\ 0.4135 \\ 0.4215 \end{bmatrix}v=⎣⎡v1v2v3⎦⎤=w(1)Tx+b1=⎣⎡0.250.250.100.150.200.250.300.350.15⎦⎤⎣⎡0.020.040.01⎦⎤+0.4=⎣⎡0.4160.41350.4215⎦⎤
h=[h1h2h3]=11+e−v=[11+e−0.41611+e−0.413511+e−0.4215]=[0.60250.60190.6038]h=\begin{bmatrix} h_1 \\ h_2 \\ h_3 \end{bmatrix}=\frac{1}{1+e^{-v}}=\begin{bmatrix} \frac{1}{1+e^{-0.416}} \\ \frac{1}{1+e^{-0.4135}} \\ \frac{1}{1+e^{-0.4215}} \end{bmatrix}=\begin{bmatrix} 0.6025 \\ 0.6019 \\ 0.6038 \end{bmatrix}h=⎣⎡h1h2h3⎦⎤=1+e−v1=⎣⎡1+e−0.41611+e−0.413511+e−0.42151⎦⎤=⎣⎡0.60250.60190.6038⎦⎤
隐层到输出层计算
z=[z1z2]=w(2)Th+b2=[0.400.350.010.250.300.35][0.60250.60190.6038]+0.7=[1.15771.2425]z=\begin{bmatrix} z_1 \\ z_2 \end{bmatrix}=w^{(2)^T}h+b_2=\begin{bmatrix} 0.40 & 0.35 & 0.01 \\ 0.25 & 0.30 & 0.35 \end{bmatrix}\begin{bmatrix} 0.6025 \\ 0.6019 \\ 0.6038 \end{bmatrix}+0.7=\begin{bmatrix} 1.1577 \\ 1.2425 \end{bmatrix}z=[z1z2]=w(2)Th+b2=[0.400.250.350.300.010.35]⎣⎡0.60250.60190.6038⎦⎤+0.7=[1.15771.2425]
模型输出y^=[y^1y^2]=11+e−z=[11+e−1.157711+e−1.2425]=[0.76090.7760]\hat{y}=\begin{bmatrix} \hat{y}_1 \\ \hat{y}_2 \end{bmatrix}=\frac{1}{1+e^{-z}}=\begin{bmatrix} \frac{1}{1+e^{-1.1577}} \\ \frac{1}{1+e^{-1.2425}} \end{bmatrix}=\begin{bmatrix} 0.7609 \\ 0.7760 \end{bmatrix}y^=[y^1y^2]=1+e−z1=[1+e−1.157711+e−1.24251]=[0.76090.7760]
与期待输出y1=0.9,y2=0.5y_1=0.9,y_2=0.5y1=0.9,y2=0.5有差距,通过反向传播修改权重值
反向传播
反向传播是根据正向传播的输出结果与期望值,计算出损失函数,再通过链式求导,最终从网络后端逐步修改权值使输出和期望值的差距变到最小的过程。
计算误差(损失函数)
L(W)=L1+L2=12(y1−y1^)2+12(y2−y2^)2=12(0.9−0.7609)2+12(0.5−0.7760)2=0.0478L(W)=L_1+L_2=\frac{1}{2}(y_1-\hat{y_1})^2+\frac{1}{2}(y_2-\hat{y_2})^2=\frac{1}{2}(0.9-0.7609)^2+\frac{1}{2}(0.5-0.7760)^2=0.0478L(W)=L1+L2=21(y1−y1^)2+21(y2−y2^)2=21(0.9−0.7609)2+21(0.5−0.7760)2=0.0478
隐层到输出层的权值W(2)W^{(2)}W(2)的更新
L(W)=L1+L2=12(y1−y1^)2+12(y2−y2^)2L(W)=L_1+L_2=\frac{1}{2}(y_1-\hat{y_1})^2+\frac{1}{2}(y_2-\hat{y_2})^2L(W)=L1+L2=21(y1−y1^)2+21(y2−y2^)2
假设:我们想计算w2,1(2)w_{2,1}^{(2)}w2,1(2)对整体误差的影响有多大,可以使用整体误差对w2,1(2)w_{2,1}^{(2)}w2,1(2)参数求偏导,将w2,1(2)w_{2,1}^{(2)}w2,1(2)用ω\omegaω表示
根据偏导数的链式法则推导
∂L(W)∂ω=∂L(W)∂y1^∂y1^∂z1∂z1∂ω\frac{\partial L(W)}{\partial \omega}=\frac{\partial L(W)}{\partial \hat{y_1}}\frac{\partial \hat{y_1}}{\partial z_1}\frac{\partial z_1}{\partial \omega}∂ω∂L(W)=∂y1^∂L(W)∂z1∂y1^∂ω∂z1
L(W)=L1+L2=12(y1−y1^)2+12(y2−y2^)2L(W)=L_1+L_2=\frac{1}{2}(y_1-\hat{y_1})^2+\frac{1}{2}(y_2-\hat{y_2})^2L(W)=L1+L2=21(y1−y1^)2+21(y2−y2^)2
⇓\Darr⇓
∂L(W)∂y1^=−(y1−y1^)=−(0.9−0.7609)=−0.1391\frac{\partial L(W)}{\partial \hat{y_1}}=-(y_1-\hat{y_1})=-(0.9-0.7609)=-0.1391∂y1^∂L(W)=−(y1−y1^)=−(0.9−0.7609)=−0.1391y1^=11+e−z1\hat{y_1}=\frac{1}{1+e^{-z_1}}y1^=1+e−z11
⇓\Darr⇓
∂y1^∂z1=y1^(1−y1^)=0.7609∗(1−0.7609)=0.1819\frac{\partial \hat{y_1}}{\partial z_1}=\hat{y_1}(1-\hat{y_1})=0.7609*(1-0.7609)=0.1819∂z1∂y1^=y1^(1−y1^)=0.7609∗(1−0.7609)=0.1819z1=w1,1(2)×h1+ω×h2+w3,1(2)×h3+b2z_1=w_{1,1}^{(2)} \times h_1+ \omega \times h_2 + w_{3,1}^{(2)} \times h_3+b_2z1=w1,1(2)×h1+ω×h2+w3,1(2)×h3+b2
⇓\Darr⇓
∂z1∂ω=h2=0.6019\frac{\partial z_1}{\partial \omega}=h_2=0.6019∂ω∂z1=h2=0.6019∂L(W)∂ω=−(y1−y1^)×y1^(1−y1^)×h2=−0.1391×0.1819×0.6019=−0.0152\frac{\partial L(W)}{\partial \omega}=-(y_1-\hat{y_1}) \times \hat{y_1}(1-\hat{y_1}) \times h_2=-0.1391 \times 0.1819 \times 0.6019=-0.0152∂ω∂L(W)=−(y1−y1^)×y1^(1−y1^)×h2=−0.1391×0.1819×0.6019=−0.0152
(假设)更新w2,1(2)w_{2,1}^{(2)}w2,1(2)的权重
w(2)=[w1,1(2)w1,2(2)w2,1(2)w2,2(2)w3,1(2)w3,2(2)]=[0.400.250.350.300.010.35]w^{(2)}=\begin{bmatrix} w_{1,1}^{(2)} & w_{1,2}^{(2)} \\ w_{2,1}^{(2)} & w_{2,2}^{(2)} \\ w_{3,1}^{(2)} & w_{3,2}^{(2)} \end{bmatrix}=\begin{bmatrix} 0.40 & 0.25 \\ 0.35 & 0.30 \\ 0.01 & 0.35 \end{bmatrix}w(2)=⎣⎢⎡w1,1(2)w2,1(2)w3,1(2)w1,2(2)w2,2(2)w3,2(2)⎦⎥⎤=⎣⎡0.400.350.010.250.300.35⎦⎤
梯度:∂L(W)∂ω=−0.0152,假设学习率α=1梯度:\frac{\partial L(W)}{\partial \omega}=-0.0152,假设学习率\alpha=1梯度:∂ω∂L(W)=−0.0152,假设学习率α=1
梯度下降:ω=ω−α×∂L(W)∂ω=0.35−(−0.0152)=0.3652梯度下降:\omega=\omega-\alpha \times \frac{\partial L(W)}{\partial \omega}=0.35-(-0.0152)=0.3652梯度下降:ω=ω−α×∂ω∂L(W)=0.35−(−0.0152)=0.3652
同理计算出新的W(2)W^{(2)}W(2)的权重值
- 反向传播的作用是将神经网络的输出误差反向传播到神经网络的输入端,并以此来更新神经网络重各个连接的权重值。
- 当第一次反向传播完成后,网络的模型参数得到更新,网络进行下一轮的正向传播过程,如此反复的迭代进行训练,从而不断缩小计算值与真实值的误差。
神经网络设计原则
训练完的结果不准?怎么办?
调整网络的拓扑结构
神经网络的拓扑结构:输入×隐层×输出层输入\times 隐层\times输出层输入×隐层×输出层
训练样本可以确定输入和输出层的节点数
输入:神经元个数=特征维数
输出层:神经元个数=分类类别数
隐层:
- 隐层的数量
- 隐层的神经元个数
隐层节点的作用是提取输入特征重的隐藏规律,每个节点都赋予一定权重
隐层节点数太少,网络从样本中获取信息的能力越差,无法反映数据集的规律;
隐层节点数太多,网络的拟合能力过强,可能拟合数据集里的噪声部分,导致模型的泛化能力变差;
选择合适的激活函数
激活函数=G函数=映射函数
- 在神经元重,输入的数据通过加权求和后,还被作用在激活函数G上(Activation Function)
- 激活函数给神经元引入非线性因素,使得神经网络可以任意逼近非线性的函数,并应用到众多非线性模型里。
- 激活函数需要的性质
可微性:当优化方法是基于梯度的时候,必须要可微(即使出现个别间断点)
输出值的范围:当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受到有限权值的影响更显著;当激活函数输出值是无限的时候,模型的训练会更加高效,一般需要更小的学习率。
例如
线性类:Sign
非线性:Sigmoid->tanh->ReLU->PReLU->ELU
Sigmoid函数
数学表达式:σ(x)=11+e−x\sigma(x)=\frac{1}{1+e^{-x}}σ(x)=1+e−x1
几何图像:
- 优点
Sigmoid是最常见的非线性激活函数
能把输出数值限制在[0,1]内 - 缺点
【精度】注意到Sigmoid函数是对称的,但是对称点不在0处,所以这个函数的输出均值大于0,导致权值w的计算梯度始终为正,造成数值的偏移,影响收敛
【速度】计算机进行指数运算的速度慢,消耗大
【饱和性】绝对值大的负数/正数,数值梯度近似为0,迭代缓慢
【梯度消失】Sigmoid函数的导数大部分是小于1,所以链式法则会导致梯度趋近于0
Sigmoid函数存在神经元会产生非0均值的输出问题,于是改进⇓\Darr⇓
tanh函数
数学表达式:tanh(x)=sinh(x)cosh(x)=ex−e−xex+e−x=2sigmoid(2x)−1tanh(x)=\frac{sinh(x)}{cosh(x)}=\frac{e^x-e^{-x}}{e^x+e^{-x}}=2sigmoid(2x)-1tanh(x)=cosh(x)sinh(x)=ex+e−xex−e−x=2sigmoid(2x)−1
几何图像:
- 优点:tanh的均值是0,减少计算的指令量。
- 缺点:在输入很大或是很小的时候,输出几乎平滑,梯度小,不利于权值更新
tanh函数存在梯度消失,于是改进⇓\Darr⇓
ReLU函数
数学表达式:f(x)=max(0,x)f(x)=max(0,x)f(x)=max(0,x)
几何图像:
- 优点:能在x>0时保持梯度不衰减,从而缓解梯度消失问题,使用的指令量更少
- 缺点
ReLU死掉。如果学习率过大,导致反向传播出现负数权值,再输入下一轮正向传播,于是输入为负数时,ReLU处于不激活状态,就死掉了。
输出范围是无限的。
ReLU函数存在不激活的状态,于是改进⇓\Darr⇓
Leaky ReLU函数->PReLU函数
数学表达式:f(x)=max(αx,x),α∈(0,1)f(x)=max(\alpha x,x),\alpha \isin (0,1)f(x)=max(αx,x),α∈(0,1)
几何图像:
- 优点:能在x>0时,保持一个小斜率α,避免ReLU死掉
PReLU函数
- 优点:能在x>0时,保持一个小斜率α,α是可调参数,每个通道都有一个α,通过反向传播训练得到
ELU函数(Exponential Linear Unit)
数学表达式:f(x)={xif x>0α(ex−1)if x≤0f(x)=\begin{cases} x &\text{if } x>0 \\ \alpha(e^x-1) &\text{if } x\leq0 \end{cases}f(x)={xα(ex−1)if x>0if x≤0
几何图像:
- α是可调参数,控制着ELU在负值区间的饱和位置
- ELU的输出均值接近于0,所以收敛速度更快
- 右侧线性部分使得ELU能够梯度消失,而左侧软饱和能够让ELU对输入变化或噪声更鲁棒,避免神经元死掉。
选择合适的损失函数
损失函数L=f(y^,y),y^是模型预测值,是神经网络模型参数w的函数y^=Hw(x)L=f(\hat{y},y),\hat{y}是模型预测值,是神经网络模型参数w的函数\hat{y}=H_w(x)L=f(y^,y),y^是模型预测值,是神经网络模型参数w的函数y^=Hw(x)
从w角度看,损失函数可以记为L(w)=f(Hw(x),y)L(w)=f(H_w(x),y)L(w)=f(Hw(x),y)
特点
- 同一个算法的损失函数不是唯一的
- 损失函数的参数是(w,b)
- 损失函数可以评价网络模型的好坏,损失函数越小说明模型和参数越符合训练样本(x,y)
- 损失函数是一个标量
- 选择损失函数,挑选对参数可微的函数(全微分->偏微分)
- 损失函数=代价函数=目标函数
均方差损失函数+Sigmoid激活函数
一个神经元的均方差损失函数:L=12(y−y^)2L=\frac{1}{2}(y-\hat{y})^2L=21(y−y^)2
Sigmoid激活函数:y^=σ(z),其中z=wx+b\hat{y}=\sigma(z),其中z=wx+by^=σ(z),其中z=wx+b
∂L∂w=−(y−y^)σ′(z)x,∂L∂b=−(y−y^)σ′(z)\frac{\partial L}{\partial w}=-(y-\hat{y})\sigma'(z)x , \frac{\partial L}{\partial b}=-(y-\hat{y})\sigma'(z)∂w∂L=−(y−y^)σ′(z)x,∂b∂L=−(y−y^)σ′(z)
σ′(z)=(1−σ(z))σ(z)\sigma'(z)=(1-\sigma(z))\sigma(z)σ′(z)=(1−σ(z))σ(z)
但是∂L∂w和∂L∂b\frac{\partial L}{\partial w}和\frac{\partial L}{\partial b}∂w∂L和∂b∂L梯度都含有σ′(z)\sigma'(z)σ′(z),当神经元输出接近1时,梯度将趋近于0,出现梯度消失,导致神经网络反向传播时参数更新缓慢,学习效率下降。
均方差损失函数+Sigmoid会出现输出层神经元学习率缓慢,于是改进⇓\Darr⇓
交叉熵损失函数+Sigmoid激活函数
交叉?y和y^的混合y和\hat{y}的混合y和y^的混合
m个i分类的交叉熵损失函数:L=−1m∑x∈D∑iyiln(yi^)L=- \frac{1}{m}\sum\limits_{x \isin D}\sum\limits_iy_iln(\hat{y_i})L=−m1x∈D∑i∑yiln(yi^)
m个2分类的交叉熵损失函数:L=−1m∑x∈D(yln(y^)+(1−y)ln(1−y^))L=- \frac{1}{m}\sum\limits_{x \isin D}(yln(\hat{y})+(1-y)ln(1-\hat{y}))L=−m1x∈D∑(yln(y^)+(1−y)ln(1−y^))
二分类的,使用Sigmoid激活函数的交叉熵损失函数:
L=−1m∑x∈D(yln(y^)+(1−y)ln(1−y^))L=- \frac{1}{m}\sum\limits_{x \isin D}(yln(\hat{y})+(1-y)ln(1-\hat{y}))L=−m1x∈D∑(yln(y^)+(1−y)ln(1−y^))
y^=σ(z)=11+e−z=11+e−(wTx+b)\hat{y}=\sigma(z)=\frac{1}{1+e^{-z}}=\frac{1}{1+e^{-(w^Tx+b)}}y^=σ(z)=1+e−z1=1+e−(wTx+b)1∂L∂w=−1m∑x∈D[yσ(x)−(1−y)1−σ(z)]∂σ(z)∂w=−1m∑x∈D[yσ(x)−(1−y)1−σ(z)]σ′(z)x\frac{\partial L}{\partial w}=- \frac{1}{m}\sum\limits_{x \isin D}[\frac{y} {\sigma(x)}-\frac{(1-y)}{1-\sigma(z)}]\frac{\partial \sigma(z)}{\partial w}=- \frac{1}{m}\sum\limits_{x \isin D}[\frac{y}{\sigma(x)}-\frac{(1-y)}{1-\sigma(z)}]\sigma'(z)x∂w∂L=−m1x∈D∑[σ(x)y−1−σ(z)(1−y)]∂w∂σ(z)=−m1x∈D∑[σ(x)y−1−σ(z)(1−y)]σ′(z)x
=1m∑x∈Dσ′(z)xσ(z)(1−σ(z))(σ(z)−y)=\frac{1}{m}\sum\limits_{x \isin D}\frac{\sigma'(z)x}{\sigma(z)(1-\sigma(z))}(\sigma(z)-y)=m1x∈D∑σ(z)(1−σ(z))σ′(z)x(σ(z)−y)
σ′(z)=σ(z)(1−σ(z))⇓将σ′(z)消掉\sigma'(z)=\sigma(z)(1-\sigma(z))\Darr将\sigma'(z)消掉σ′(z)=σ(z)(1−σ(z))⇓将σ′(z)消掉∂L∂w=−1m∑x∈D(σ(z)−y)x\frac{\partial L}{\partial w}=-\frac{1}{m}\sum\limits_{x \isin D}(\sigma(z)-y)x∂w∂L=−m1x∈D∑(σ(z)−y)x
∂L∂b=−1m∑x∈D(σ(z)−y)\frac{\partial L}{\partial b}=-\frac{1}{m}\sum\limits_{x \isin D}(\sigma(z)-y)∂b∂L=−m1x∈D∑(σ(z)−y)
过拟合与正则化
欠拟合:本质原因是训练的特征少,拟合函数无法满足训练集,误差大
过拟合:训练的特征维度多,使得拟合的函数很完美的接近训练数据集,但泛化(测试集的预测效果)能力差,对新数据预处能力不足。
规模过大,容易导致过拟合⟹\implies⟹正则化
- 正则化包括:参数范数惩罚,稀疏化,Bagging集成,Dropout,提前终止,数据集扩增⟹\implies⟹抑制过拟合
- 正则化思想:加上惩罚使损失减小
- 尽可能使w32和w42w_3^2和w_4^2w32和w42近似于0【惩罚项,惩罚高阶参数,w32和w42w_3^2和w_4^2w32和w42趋近0】
- 正则化后的损失函数:L(w;X,y)=minw12m∑i=1m∣∣yi,yi^∣∣2+[正则化项/惩罚项]θ∑j=1kwj2L(w;X,y)=\min\limits_w\frac{1}{2m}\sum\limits_{i=1}^{m}||y_i,\hat{y_i}||^2+[正则化项/惩罚项]\theta\sum\limits_{j=1}^{k}w_j^2L(w;X,y)=wmin2m1i=1∑m∣∣yi,yi^∣∣2+[正则化项/惩罚项]θj=1∑kwj2
- θ是正则化参数,权重w,偏置b,正则化过程仅对权重w进行惩罚,Ω(w)=∑j=1kwj2\theta是正则化参数,权重w,偏置b,正则化过程仅对权重w进行惩罚,\Omega(w)=\sum\limits_{j=1}^{k}w_j^2θ是正则化参数,权重w,偏置b,正则化过程仅对权重w进行惩罚,Ω(w)=j=1∑kwj2
L2L^2L2正则化
L2正则化项:Ω(w)=12∣∣w∣∣22L^2正则化项:\Omega(w)=\frac{1}{2}||w||_2^2L2正则化项:Ω(w)=21∣∣w∣∣22 L2范数(sqrt)的平方
目标函数:L(w;X,y)=L(w;X,y)+θ2∣∣w∣∣2目标函数:L(w;X,y)=L(w;X,y)+\frac{\theta}{2}||w||^2目标函数:L(w;X,y)=L(w;X,y)+2θ∣∣w∣∣2
如何避免过拟合?
- ▽wL(w;X,y)=▽wL(w;X,y)+θw\bigtriangledown_wL(w;X,y)=\bigtriangledown_wL(w;X,y)+\theta w▽wL(w;X,y)=▽wL(w;X,y)+θw
- 单步梯度更新权重:
w←w−η(▽wL(w;X,y)+θw)w\gets w-\eta(\bigtriangledown_wL(w;X,y)+\theta w)w←w−η(▽wL(w;X,y)+θw)
w←(1−ηθ)w−η▽wL(w;X,y)w\gets(1-\eta\theta)w-\eta\bigtriangledown_wL(w;X,y)w←(1−ηθ)w−η▽wL(w;X,y) - 通过L2L^2L2正则化后,w权重变小,网络的复杂度降低,对数据拟合的也更好
L1L^1L1正则化->稀疏化(系统所有权重趋近0)
L2正则化项:Ω(w)=∣∣w∣∣1=∑i∣wi∣L^2正则化项:\Omega(w)=||w||_1=\sum\limits_i|w_i|L2正则化项:Ω(w)=∣∣w∣∣1=i∑∣wi∣ L1范数
目标函数:L(w;X,y)=L(w;X,y)+θ∣∣w∣∣1目标函数:L(w;X,y)=L(w;X,y)+\theta||w||_1目标函数:L(w;X,y)=L(w;X,y)+θ∣∣w∣∣1
- ▽wL(w;X,y)=▽wL(w;X,y)+θsign(w)\bigtriangledown_wL(w;X,y)=\bigtriangledown_wL(w;X,y)+\theta sign(w)▽wL(w;X,y)=▽wL(w;X,y)+θsign(w)
- sign(w)函数来影响梯度
- L1L^1L1正则化通过加入一个符号函数,使得当wiw_iwi为正数时,更新后的wiw_iwi变小;当wiw_iwi为负数时,更新后的wiw_iwi变大,因此正则化后的效果就是让当wiw_iwi接近0,从而减小网络复杂度,防止了过拟合。
Bagging集成方法
- Bagging训练不同的模型来共同决策测试样例的输出,不同的模型即使在同一个训练数据集上也会产生不同的误差
- Bagging可以多次重复使用同一个模型,训练算法和目标函数进行训练
- Bagging的数据集从原始数据集重复采样获取,数据集的大小于原始数据集保持一致。
Dropout正则化
- L2和L2L^2和L^2L2和L2正则化是通过在目标函数重增加一项惩罚项,Dropout正则化是通过在训练时暂停修改神经网络来实现的。
- Dropout正则化思路:在训练过程中随机删除一些隐层单元,在计算时无视这些连接。
其他正则化方法
- 提前终止
当训练较大的网络模型时,能够观察到训练误差会随着时间的推移降低但验证集的误差会再次上升。因此,在训练过程中返回验证误差达最低的参数设置,就可以获得验证集误差更低的模型,这种策略称之为提前终止。 - 多任务学习
多任务学习通过合并多个任务的样例来减少神经网络的泛化误差。 - 数据集增强
使用更多的数据进行训练,可对原数据集进行变换形成新数据集添加到训练数据中。 - 参数共享
强迫两个模型(监督模式下的训练模型和无监督模式下的训练模型)的某些参数相等,使其共享唯一的一组参数。 - 稀疏表示
惩罚神经网络中的激活单元,稀疏化激活单元。
交叉验证
- 交叉验证的方式给每个样本作为测试集和训练集的机会,充分利用样本信息,保证了鲁棒性,防止过度拟合
- 选择多种模型进行训练时,使用交叉验证能够评判各模型的鲁棒性
最简单的验证方式[划分]
- 不同划分,得到MSE-mean squard error变动较大
- 缺点:最终模型与参数的选取将极大程度依赖于你对训练集和测试集的划分方法,部分数据参与训练。
Leave-one-out cross-validation验证方法
- 每次取一个数据作为测试集的唯一元素,而其他n-1各数据都作为训练集训练模型和调参,最终训练出n个模型,得到n个MSE,取平均得到最终的Test MSE。
- 缺点:计算量大,耗时长
K-折交叉验证
- 不重复地每次取其中一份做测试集,用其他K-1份做训练集,之后计算各个模型的MSE,取平均MSE=1k∑i=1KMSEiMSE=\frac{1}{k}\sum\limits_{i=1}^{K}MSE_iMSE=k1i=1∑KMSEi
- [当K=n,就是Leave-one-out cross-validation]
- 优点:所有样本都被当作了训练集和测试集,每个样本都被验证过一次,相比Leave-one-out cross-validation,计算降低,耗时减少。
小结
- 从机器学习到神经网络
掌握单变量线性回归、多变量线性回归、感知机、神经元、激活函数、偏置等的概念和相关用法 - 正向传播、反向传播
了解数据正向传播和反向传播的过程。 - 拓扑结构
隐层设计思想。 - 激活函数
了解常用激活函数的优缺点 - 损失函数
了解损失函数的作用和种类、掌握至少一种验证方式。 - 过拟合与正则化
了解过拟合出现的原因并掌握防止过拟合的正则化方法 - 交叉验证
掌握至少一种交叉验证的原理和方法
刚开始写数学公式,特地去总结了一些latex数学公式,字体真好看.
智能计算系统(学习笔记)-第二章神经网络相关推荐
- [go学习笔记.第二章] 2.go语言的开发工具以及安装和配置SDK
一.工具介绍: 1.Visual Studio Code 一个运行于Mac,Windows,和linux上的,默认提供Go语言的语法高亮的IED,可以安装Go语言插件,还可以支持智能提示,编译运行等功 ...
- 《Go语言圣经》学习笔记 第二章 程序结构
Go语言圣经学习笔记 第二章 程序结构 目录 命名 声明 变量 赋值 类型 包和文件 作用域 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记,几乎是书上的内 ...
- PhalAPI学习笔记 ——— 第二章接口服务请求
PhalAPI学习笔记 --- 第二章接口服务请求 前言 接口服务请求 接口服务请求案例 自定义接口路由 开启匹配路由 配置路由规则 nginx apache 服务请求 结束语 前言 公司业务需要转学 ...
- 小吴的《机器学习 周志华》学习笔记 第二章 模型评估与选择
小吴的<机器学习 周志华>学习笔记 第二章 模型评估与选择 上一周我们介绍了第一章的基础概念,这一次将带来第二章的前三节.后面的2.4 比较检验与2.5 偏差与方差,涉及概率论与数理统计概 ...
- 小吴的《机器学习 周志华》学习笔记 第二章 2.4 比较检验、2.5 偏差与方差
小吴的<机器学习 周志华>学习笔记 第二章 2.4 比较检验. 2.5 偏差与方差 2.4 比较检验 上一周提到了实验的评价方法和性能量度,步骤简单可以看成:先使用某种实验评估方法测得学习 ...
- 机器人导论(第四版)学习笔记——第二章
机器人学导论(第四版)学习笔记--第二章 2. 空间描述和变换 2.1 引言 2.2 描述:位置.姿态与位姿 2.3 映射:从一个坐标系到另一个坐标系的变换 2.4 算子:平行,旋转和变换 2.5 总 ...
- Kotlin学习笔记 第二章 类与对象 第十一节 枚举类 第八节密封类
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin学习笔记 第二章 类与对象 第十四 十五节 委托 委托属性
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin学习笔记 第二章 类与对象 第七节 数据类
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
最新文章
- Nginx配置文件nginx.conf中文详解(总结)
- javascript this指针详解
- 几年前,我撸了一套RabbitMQ的客户端
- OpenCV角点检测之Harris角点检测
- YUV420数据格式
- java线程——什么是线程?
- java大数输出一位小数_java大数练习 大明A+B(大数小数的高精度)
- 在X++中使用IoC/DI模式应对不断变化的客户需求
- 计算机设备安装属于劳务吗,​安装服务费属于劳务费吗
- Eclipse SVN插件比较 Subclipse vs Subversive
- java 拉姆达表达式_Java8中foreach与拉姆达表达式的组合使用
- vue实战 —— 图书商城移动端项目
- Flutter 正在被悄悄放弃吗?
- 春运购买火车票、乘车攻略
- shell小技巧(一百三十三)n个人报数出局游戏
- H3C华三模拟器HCL安装与下载(HCL_v2.1.2版本)
- Windows7瘦身攻略
- 信息安全学习4. 重放攻击的概念与防范
- 360加固签名验证_360加固保加固apk并自动签名
- ns3 lalala