前馈神经网络
1.神经网络
神经网络最早是作为一种主要的连接主义模型。
20世纪80年代后期,最流行的一种连接主义模型是分布式并行处理(Parallel Distributed Processing,PDP)网络,其有3个主要特性:
1)信息表示是分布式的(非局部的);
2)记忆和知识是存储在单元之间的连接上;
3)通过逐渐改变单元之间的连接强度来学习新的知识。
引入误差反向传播来改进其学习能力之后,神经网络也越来越多地应用在各种机器学习任务上。
人工神经网络主要由大量的神经元以及它们之间的有向连接构成。因此考虑三方面:
神经元的激活规则
主要是指神经元输入到输出之间的映射关系,一般为非线性函数。
网络的拓扑结构
不同神经元之间的连接关系。
学习算法
通过训练数据来学习神经网络的参数。
2.网络结构
1.前馈网络
2.记忆网络(有循环,历史状态,记忆能力)
3.图网络
3.前馈神经网络(全连接神经网络、多层感知器)
各神经元分别属于不同的层,层内无连接。
相邻两层之间的神经元全部两两连接。
整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示。
这是一个有向无环图
\(前馈神经网络的符号\)
记号 | 含义 |
---|---|
\(L\) | \(神经网络的层数\) |
\(M_i\) | \(第l层神经元的个数\) |
\(f_l(\cdot)\) | \(第l层神经元的激活函数\) |
\(W^{(l)}\in R^{M_l\times M_{l-1}}\) | \(第l-1层到第l层的权重矩阵\) |
\(b^{(l)}\in R^{M_l}\) | \(第l-1层到第l层的偏置\) |
\(z^{(l)}\in R^{M_l}\) | \(第l层神经元的净输入(净活性质)\) |
\(a^{(l)}\in R^{M_l}\) | \(第l层神经元的输出(活性质)\) |
3.1信息传递过程
前馈神经网络通过下面公式进行信息传播
\(z^{(l)}=W^{(l)}a^{(l-1)}+b^{(l)}\)
\(a^{(l)}=f_l(z^{(l)}),这个f是对向量z^{(l)}的每个分量做函数,按元素的激活函数\)
\(合并\)
\(a^{(l)}=f_l(W^{(l)}a^{(l-1)}+b^{(l)})\)
前馈计算:
\(x=a^{(0)}\rightarrow z^{(1)}\rightarrow a^{(1)}\rightarrow z^{(2)}.\rightarrow ...\rightarrow a^{(L-1)}\rightarrow z^{(L)}\rightarrow a^{(L)}=\phi(x;W,b),W,b是参数\)
\(这里的符号比较复杂,举个例子\)
\(第一层有3个神经元,第二层有5个神经元,则\)
\(M_1 =3,M_2=5,W^2\in R^{5\times 3}的矩阵,代表第一层到第二层的权重矩阵,\alpha_1\in R^3,b^2 in R^5,z^2 \in R^5\)
\(z^{2}=W^{2}a^{1}+b^{2}\)
\(R^5 = R^{5\times 3} \cdot R^3 + R^5\)
3.2 通用近似定理
根据通用近似定理,对于具有线性输出层和至少一个使用“挤压”性质的激活函数的隐藏层组成的前馈神经网络,只要其隐藏层神经元的数量足够,它可以以任意的精度来近似任何从一个定义在实数空间中的有界闭集函数。
所以"挤压"性质的函数是指像sigmoid函数的有界函数,ReLU也使用
关于证明可以搜索
A visual proof that neural nets can compute any function
作业
ReLU也满足通用近似定理的证明
3.3 挤压函数Squashing function
挤压函数是将大范围输入挤压到较小区间的函数,通常被用于做 激活函数 ,主要有 Sigmoid 函数 和 TANH 双曲正切函数两种。
其中 Sigmoid 函数是一种常见的挤压函数,可将较大范围的输入挤压到 (0,1) 区间内
TAHN 双曲正切函数是 Sigmoid 函数的变体,其取值范围在 [ -1 , 1 ],定义域为 R,其同为挤压函数的一种。
3.4 前馈神经网络在机器学习中的应用
神经网络可以作为一个“万能”函数来使用,可以用来进行复杂的特征转换,或逼近一个复杂的条件分布。
\(\hat y =g(\phi(x);\theta),\phi(x)是神经网络,g是分类器,P(y|x)=\phi(x)\)
如果\(g(⋅)\)为Logistic回归,那么Logistic回归分类器可以看成神经网络的最后一层。
也可以是其他复杂的分类器,比如SVM等等,但是分类器不是关键,关键是特征
3.5 计算梯度-误差反向传播算法
3.5.1 链式法则
\(1.若x\in R,y=g(x) \in R^M,z=f(y)\in R^N,则有\)
\(\frac{\partial z}{\partial x}=\frac{\partial y}{\partial x}\frac{\partial z}{\partial y}\in R^{1\times N}\)
\(1.若x\in R^M,y=g(x) \in R^K,z=f(y)\in R^N,则有\)
\(\frac{\partial z}{\partial x}=\frac{\partial y}{\partial x}\frac{\partial z}{\partial y}\in R^{M\times N}\)
\(1.若X\in R^{M\times N}为矩阵,y=g(x) \in R^K,z=f(y)\in R,则有\)
\(\frac{\partial z}{\partial x_{ij}}=\frac{\partial y}{\partial x_{ij}}\frac{\partial z}{\partial y}\in R\)
3.5.2 结构化风险函数
\(R(W,b)=\frac{1}{N}\sum_{n=1}^{N}L(y^{(n)},\hat y^{(n)})+\frac{1}{2}\lambda ||W||_F^2\)
\(z^{(l)}=W^{(l)}{\alpha}^{(l-1)}+b^{(l)}\)
\(分别对w^{(l)}_{ij},b^{(l)}分别求偏导\)
\(利用z做跳板,并利用链式法则\)
\(\frac{\partial L(y,\hat y)}{\partial w^{(l)}_{ij}}=\frac{\partial z^{(l)}}{\partial w^{(l)}_{ij}}\frac{\partial L(y,\hat y)}{\partial z^{(l)}}\)
\(\frac{\partial L(y,\hat y)}{\partial b^{(l)}}=\frac{\partial z^{(l)}}{\partial b^{(l)}}\frac{\partial L(y,\hat y)}{\partial z^{(l)}}\)
\(1.求\frac{\partial z^{(l)}}{\partial w_{ij}^{(l)}}=[\frac{\partial z_1^{(l)}}{\partial w_{ij}^{(l)}},...,\frac{\partial z_i^{(l)}}{\partial w_{ij}^{(l)}},...,\frac{\partial z_{M_l}^{(l)}}{\partial w_{ij}^{(l)}}]=[0,...,\frac{\partial (w_{i:}^{(l)}a^{(l-1)}+b_{i}^{(l)})}{\partial w_{ij}^{(l)}},...,0]\)
\(=[0,...,a_j^{(l-1)},...,0]\in R^{1\times M_l}\)
\(2.将\frac{\partial L(y,\hat y)}{\partial z^{(l)}} 定义为 \delta^{(l)} \in R^{M_l},称为误差项\)
\(\color{red}{这是核心}\)
\(3.求\frac{\partial z^{(l)}}{\partial b^{(l)}}=I_{M_l}\in R^{M_l \times M_l}\)
3.5.3 \(计算\delta^{(l)}\)
先放两条公式
\(z^{(l+1)}=W^{(l+1)}{\alpha}^{(l)}+b^{(l+1)}\)
\(a^{(l)}=f_l(z^{(l)})\)
\(开始计算\delta^{(l)}=\frac{\partial L(y,\hat y)}{\partial z^{(l)}}\)
\(=\frac{\partial a^{(l)}}{\partial z^{(l)}}\frac{\partial z^{(l+1)}}{\partial a^{(l)}}\frac{\partial L(y,\hat y)}{\partial z^{(l+1)}}\)
\(这里停一下\)
\(\frac{\partial a^{(l)}}{\partial z^{(l)}} 就是这个函数求偏导 a^{(l)}=f_l(z^{(l)})\)
\(\frac{\partial z^{(l+1)}}{\partial a^{(l)}}就是这个函数求偏导 z^{(l+1)}=W^{(l+1)}{\alpha}^{(l)}+b^{(l+1)}\)
\(继续推导\)
\(=diag(f_l^{'}(z^{(l)}))\cdot (W^{(l+1)})^T\cdot \delta^{(l+1)}\)
\(=f_l^{'}(z^{(l)})⊙( (W^{(l+1)})^T\cdot \delta^{(l+1)}) \in R^{M_l}\)
\(解释一下因为((W^{(l+1)})^T\cdot \delta^{(l+1)})是一个向量,前面diag是一个对角矩阵,两者相乘就是以对角元素为元素的向量点乘 后面的((W^{(l+1)})^T\cdot \delta^{(l+1)})\)
\(观察上面的式子,从l+1的误差\delta 反向计算出l层的\delta,所以这就是\color{red}{反向传播算法}\)
3.5.4 计算完整梯度
回到计算梯度的目标函数
\(\frac{\partial L(y,\hat y)}{\partial w^{(l)}_{ij}}=\frac{\partial z^{(l)}}{\partial w^{(l)}_{ij}}\frac{\partial L(y,\hat y)}{\partial z^{(l)}}\)
\(\frac{\partial L(y,\hat y)}{\partial b^{(l)}}=\frac{\partial z^{(l)}}{\partial b^{(l)}}\frac{\partial L(y,\hat y)}{\partial z^{(l)}}\)
\(1.\frac{\partial L(y,\hat y)}{\partial w^{(l)}_{ij}}\)
\(=[0,...,a_j^{(l-1)},...,0] \delta^{(l)}\)
\(=\delta_i^{(l)}a_j^{(l-1)}\)
则
\(\color{red}{\frac{\partial L(y,\hat y)}{\partial W^{(l)}}=\delta^{(l)}(a^{(l-1)})^T \in R^{M_l \times M_{l-1}}}\)
\(\color{red}{\frac{\partial L(y,\hat y)}{\partial b^{(l)}}=I_M \delta^{(l)}=\delta^{(l)} \in {R^{M_l}}}\)