提交 77b4c6b0 编写于 作者: LSayhi's avatar LSayhi

update notes

上级 5fbd929f
......@@ -4,7 +4,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# 机器学习系列\n",
"# 机器学习系列(1)\n",
"## 深度前馈神经网络--原理解释、公式推导及Python实现\n",
"\n",
"**深度神经网络的原理解释:**\n",
......@@ -16,17 +16,21 @@
" - 数据集\n",
" \n",
"**公式推导:**\n",
" \n",
" - 前向过程\n",
" - BP算法\n",
" - 梯度下降\n",
"\n",
"**Python实现:**\n",
" - 见文章内容\n",
" \n",
" - 见文章内容\n",
" \n",
"**申明**\n",
"\n",
"本文原理解释及公式推导部分均由LSayhi完成,供学习参考,可传播;代码实现部分的框架由Coursera提供,由LSayhi完成,详细数据及代码可在github查阅。\n",
"https://github.com/LSayhi/Neural-network-and-Deep-learning"
"https://github.com/LSayhi/DeepLearning/tree/master/Coursera-deeplearning%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0\n",
"\n",
"微信公众号:AI有点可ai"
]
},
{
......@@ -69,47 +73,52 @@
"\n",
"**前向传播:**\n",
"\n",
"对于一个 $L$ 层的前馈网络,第 $l$ 层的线性函数实现$$z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]}$$对M个样本向量化后,表示为$$Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}$$那么$$A^{[l]}=g(Z^{[l]})=g(W^{[l]}A^{[l-1]}+b^{[l]})$$,其中g为激活函数,常见的激活函数有sigmoid、tanh、Relu等,$l=1,2,……,L$。\n",
" 对于一个 $L$ 层的前馈网络,第 $l$ 层的线性函数实现$$z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]}$$对M个样本向量化后,表示为$$Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}$$那么$$A^{[l]}=g(Z^{[l]})=g(W^{[l]}A^{[l-1]}+b^{[l]})$$,其中g为激活函数,常见的激活函数有sigmoid、tanh、Relu等,$l=1,2,……,L$。\n",
" \n",
" 特殊地,输入层$a^{[0]}$另记为$x$,输出层记为$a^{[L]}$,对M个样本向量化后为$X$和$A^{[L]}$。由此,只要给出$X$,由公式$$A^{[l]}=g(Z^{[l]})=g(W^{[l]}A^{[l-1]}+b^{[l]})$$和$$a^{[0]}=X$$即可由前向后逐步求出$A^{[L]}$,这就是前向传播的过程。\n",
"\n",
"**损失和代价:**\n",
" \n",
" - 损失函数:对应于单个样本。$$L(\\hat{y},y)=y^{(m)}\\log\\left(a^{[L] (m)}\\right) + (1-y^{(m)})\\log\\left(1- a^{[L](m)}\\right)$$\n",
" 损失函数定义了度量神经网络输出层输出的数据与标签之间的差异值(即损失),其功能类似于均方误差函数$$MSE=\\sqrt{{(\\hat{y}^{[m]}-y^{(m)}})^{2}}$$事实上,$$L(\\hat{y},y)=y^{(m)}\\log\\left(a^{[L] (m)}\\right) + (1-y^{(m)})\\log\\left(1- a^{[L](m)}\\right)$$是由最大似然准则(MLP)推导出的,最小化均方误差等价于最小化损失函数,但因均方误差函数不具有凸函数的性质,而损失函数是凸函数,没有鞍点,代价函数收敛于最小值,而不是某个非最小的极小值点。\n",
" 损失函数定义了度量神经网络输出层输出的数据与标签之间的差异值(即损失),其功能类似于均方误差函数$$MSE=\\sqrt{{(\\hat{y}^{[m]}-y^{(m)}})^{2}}$$事实上,$$L(\\hat{y},y)=y^{(m)}\\log\\left(a^{[L] (m)}\\right) + (1-y^{(m)})\\log\\left(1- a^{[L](m)}\\right)$$是交叉信息熵,最小化交叉信息熵也等效于最大似然准则(MLP),最小化交叉信息熵直观上可以认为和最小化误差相似,能够用来度量被比较对象的差异大小,但因均方误差函数的特点,在逻辑回归中很可能会导致收敛速度缓慢,并且代价函数不一定是凸函数,不一定能收敛于最小值,可能会收敛到某个非最小的极小值点,所以我们常用交叉信息熵代替均方误差。这里可以参考个人笔记**机器学习中的数学(1)--交叉信息熵**\n",
" - 代价函数:对于M个样本集。$$J(X,Y;W,b)=-\\frac{1}{M} \\sum\\limits_{m = 1}^{M} (y^{(m)}\\log\\left(a^{[L] (m)}\\right) + (1-y^{(m)})\\log\\left(1- a^{[L](m)}\\right)) \\tag{7}$$代价函数关心的是整个样本集的损失\n",
" \n",
"**反向传播**\n",
"\n",
"网络的目标是使得$J(X,Y;W,b)$最小,在数学上就是多变量函数求最值问题,首先想到的可能是求偏导数,然后另偏导数等于零,找到最小值点,得到对应参数W和b的值,此法称正规方程法,但是由于矩阵$XX^{T}$不一定可逆,所以我们使用梯度下降法来寻找最优的参数W和b。\n",
"梯度下降法表示为:$$W=W-\\alpha\\frac{\\partial{J}}{\\partial{W}}$$$$b=b-\\alpha\\frac{\\partial{J}}{\\partial{b}}$$\n",
"梯度下降法也需要求出代价函数关于参数W和b的偏导数,由求导数的链式法则可知,\n",
" - 反向传播过程可由下图表示:\n",
"\n",
"<img src=\"images/backprop_kiank.png\" style=\"width:650px;height:250px;\">\n",
"<caption><center> **Figure ** : Forward and Backward propagation for *LINEAR->RELU->LINEAR->SIGMOID* <br> *The purple blocks represent the forward propagation, and the red blocks represent the backward propagation.* </center></caption>\n",
"\n",
" 网络的目标是使得$J(X,Y;W,b)$最小,在数学上就是多变量函数求最值问题,首先想到的可能是求偏导数,然后另偏导数等于零,找到最小值点,得到对应参数W和b的值,此法称正规方程法,但是由于矩阵$XX^{T}$不一定可逆,所以我们使用梯度下降法来寻找最优的参数W和b。\n",
" 梯度下降法表示为:$$W=W-\\alpha\\frac{\\partial{J}}{\\partial{W}}$$$$b=b-\\alpha\\frac{\\partial{J}}{\\partial{b}}$$\n",
" 梯度下降法也需要求出代价函数关于参数W和b的偏导数,由求导数的链式法则可知,\n",
"$$\\frac{\\partial{J}}{\\partial{W^{[l]}_{ij}}}=\\frac{\\partial{J}}{\\partial{a^{[l]}_{i}}}\\frac{\\partial{a^{[l]}_{i}}}{\\partial{z^{[l]}_{i}}}\\frac{\\partial{z^{[l]}_{i}}}{\\partial{W^{[l]}_{ij}}}=\\frac{\\partial{J}}{\\partial{a^{[l]}_{i}}}\\frac{\\partial{a^{[l]}_{i}}}{\\partial{z^{[l]}_{i}}}a^{[l-1]}_{j}=\\frac{\\partial{J}}{\\partial{a^{[l]}_{i}}}g^{\\prime}(z^{[l]}_{i})a^{[l-1]}_{j}\\tag{1}$$\n",
"$$\\frac{\\partial{J}}{\\partial{b^{[l]}_{i}}}=\\frac{\\partial{J}}{\\partial{a^{[l]}_{i}}}\\frac{\\partial{a^{[l]}_{i}}}{\\partial{z^{[l]}_{i}}}\\frac{\\partial{z^{[l]}_{i}}}{\\partial{b^{[l]}_{i}}}=\\frac{\\partial{J}}{\\partial{a^{[l]}_{i}}}g^{\\prime}(z^{[l]}_{i})\\tag{2}$$\n",
"由于,$$\\frac{\\partial{J}}{\\partial{z^{[l]}_{i}}}=\\frac{\\partial{J}}{\\partial{a^{[l]}_{i}}}\\frac{\\partial{a^{[l]}_{i}}}{\\partial{z^{[l]}_{i}}}=\\frac{\\partial{J}}{\\partial{a^{[l]}_{i}}}g^{\\prime}(z^{[l]}_{i})\\tag{3}$$\n",
"将③代入①和②,可知:\n",
" 由于,$$\\frac{\\partial{J}}{\\partial{z^{[l]}_{i}}}=\\frac{\\partial{J}}{\\partial{a^{[l]}_{i}}}\\frac{\\partial{a^{[l]}_{i}}}{\\partial{z^{[l]}_{i}}}=\\frac{\\partial{J}}{\\partial{a^{[l]}_{i}}}g^{\\prime}(z^{[l]}_{i})\\tag{3}$$\n",
" 将③代入①和②,可知:\n",
"$$\\frac{\\partial{J}}{\\partial{W^{[l]}_{ij}}}=\\frac{\\partial{J}}{\\partial{z^{[l]}_{i}}}a^{[l-1]}_{j}\\tag{4}$$\n",
"$$\\frac{\\partial{J}}{\\partial{b^{[l]}_{i}}}=\\frac{\\partial{J}}{\\partial{z^{[l]}_{i}}} \\tag{5}$$\n",
"将式③、④、⑤矢量化,并记为\n",
" 将式③、④、⑤矢量化,并记为\n",
"$$dz^{[l]}=da^{[l]}*g^{\\prime}(z^{[l]})\\tag{6}$$\n",
"$$dW^{[l]}=dz^{[l]}a^{[l-1]}\\tag{7}$$\n",
"$$db^{[l]}=dz^{[l]}\\tag{8}$$\n",
"“$*$”表示矩阵对应元素相乘,⑥式中的$da^{[l]}=(W^{[l+1]})^Tdz^{[l+1]}$,推导过程如下,对于第$l$层,应用链式法则\n",
" “$*$”表示矩阵对应元素相乘,⑥式中的$da^{[l]}=(W^{[l+1]})^Tdz^{[l+1]}$,推导过程如下,对于第$l$层,应用链式法则\n",
"$$da^{[l]}_{i}=\\frac{\\partial{J}}{\\partial{a^{[l]}_{i}}}=\\sum_{j=1}^{n_{l+1}}\\frac{\\partial{J}}{\\partial{a^{[l+1]}_{j}}}\\frac{\\partial{a^{[l+1]}_{j}}}{\\partial{z^{[l+1]}_{j}}}\\frac{\\partial{z^{[l+1]}_{j}}}{\\partial{a^{[l]}_{i}}}$$\n",
"$$即da^{[l]}_{i}=\\sum_{j=1}^{n_{l+1}}\\frac{\\partial{J}}{\\partial{a^{[l+1]}_{j}}}g^{\\prime}(z^{[l+1]}_{j})W^{[l+1]}_{ji}=\\sum_{j=1}^{n_{l+1}}\\frac{\\partial{J}}{\\partial{z^{[l+1]}_{j}}}W^{[l+1]}_{ji}=(W^{[l+1]}_{(,i)})^{T}\\frac{\\partial{J}}{\\partial{z^{[l+1]}_{j}}}$$\n",
"向量化后为:$$da^{[l]}=(W^{[l+1]})^Tdz^{[l+1]}$$代入⑥,故⑥式可改写为:$$dz^{[l]}=(W^{[l+1]})^Tdz^{[l+1]}*g^{\\prime}(z^{[l]})\\tag{9}$$\n",
"再对M个数据向量化:\n",
" 向量化后为:$$da^{[l]}=(W^{[l+1]})^Tdz^{[l+1]}$$代入⑥,故⑥式可改写为:$$dz^{[l]}=(W^{[l+1]})^Tdz^{[l+1]}*g^{\\prime}(z^{[l]})\\tag{9}$$\n",
" 再对M个数据向量化:\n",
"$$dZ^{[l]}=dA^{[l]}*g^{\\prime}(Z^{[l]})=(W^{[l+1]})^TdZ^{[l+1]}*g^{\\prime}(Z^{[l]})\\tag{10}$$\n",
"$$ dW^{[l]} = \\frac{\\partial{J} }{\\partial W^{[l]}} = \\frac{1}{m} dZ^{[l]} A^{[l-1] T} \\tag{11}$$\n",
"$$ db^{[l]} = \\frac{\\partial{J} }{\\partial b^{[l]}} = \\frac{1}{m} \\sum_{i = 1}^{m} dZ^{[l](i)}\\tag{12}$$\n",
"$$ dA^{[l-1]} = \\frac{\\partial{J} }{\\partial A^{[l-1]}} = W^{[l] T} dZ^{[l]} \\tag{13}$$\n",
"**梯度下降:**\n",
"由(10)、(11)、(12)、(13)便可以从输出层反向递推到第1层,得到关于参数W和b的所有偏导数,再应用梯度下降法,不断更新参数:$$W=W-\\alpha\\frac{\\partial{J}}{\\partial{W}}$$$$b=b-\\alpha\\frac{\\partial{J}}{\\partial{b}}$$\n",
"就可以得到最佳的W和b参数,使得训练集的代价函数最小。\n",
"就可以得到最佳的W和b参数,使得训练集的代价函数最小。注:梯度的方向是函数值上升最快的方向,因此梯度的负方向即是函数值下降最快的方向,应用梯度下降即是使函数在某个位置(W,b)沿最快的方向减小。\n",
"\n",
"**网络优化:**\n",
"\n",
"至此,网络的训练已经完成,可以在测试集上进行泛化测试。如果泛化的准确率不高,分析原因:\n",
" 至此,网络的训练已经完成,可以在测试集上进行泛化测试。如果泛化的准确率不高,分析原因:\n",
"\n",
" - 如果过拟合了,可以考虑增加数据集、正则化、dropout、适当减小网络层数L等\n",
" - 如果欠拟合了,可以考虑增加特征数量、增加网络层数、隐藏层神经元数目等"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册