[Machine Learning]学习笔记-Neural Networks

引子

对于一个特征数比较大的非线性分类问题,如果采用先前的回归算法,需要很多相关量和高阶量作为输入,算法的时间复杂度就会很大,还有可能会产生过拟合问题,如下图:

这时就可以选择采用神经网络算法。
神经网络算法最早是人们希望模仿大脑的学习功能而想出来的。

一个神经元,有多个树突(Dendrite)作为信息的输入通道,也有多个轴突(Axon)作为信息的输出通道。一个神经元的输出可以作为另一个神经元的输入。神经元的概念和多分类问题的分类器概念很相近,都是可以接收多个输入,在不同的权值(weights)下产生出多个不同的输出。

模型表示

模型可以写成如下形式:
\[
\begin{bmatrix}x_0 \newline x_1 \newline x_2 \newline \end{bmatrix}\rightarrow\begin{bmatrix}\ \ \ \newline \end{bmatrix}\rightarrow h_\theta(x)
\]
上图可以称为单隐层前馈网络,由输入层\(X\),输出层和它们之间的隐含层构成。

每个输出层都有一个权重矩阵(weights matrix)和一个偏置单元(bias unit),用来计算输出。

前向传播


首先回顾一下Logistic Regression的单分类问题中\(h_\theta\)的计算:
\[\begin{align*}\begin{bmatrix}x_0 \newline x_1 \newline x_2\end{bmatrix} \rightarrow\begin{bmatrix}g(z^{(2)})\end{bmatrix} \rightarrow h_\Theta(x)\end{align*}\]

可以写为:
\[z^{(2)}=\omega^{(2)}a^{(1)}+b^{(2)}\\a^{(2)}=g(z^{(2)})\\h_\theta(x)=a^{(2)}
\]
而神经网络的前向传播,也就是在此基础上增加了层数,让一层的输出作为下一层的输入:
\[z^{(i)}=\omega^{(i)}a^{(i-1)}+b^{(i)}\\a^{(i)}=g(z^{(i)})\\z^{(i+1)}=\omega^{(i+1)}a^{(i)}+b^{(i+1)}\\...
\]
需要注意的是,每一层有多个单元,所以这里面的权重也是个二维矩阵。

反向传播(Backpropagation)

直观理解

但给予初始的偏置单元和权重矩阵后,预测值会不太理想。
那么,如何使预测值符合真实值呢?
\[z^{(i)}=\omega^{(i)}a^{(i-1)}+b^{(i)}\]
可以发现,可以通过改变每一层的\(a,\omega,b\)来改变最终的输出,但实际上\(a\)是不能直接改变的。
所以本质上要做的就是改变\(\omega\)和\(b\)来使预测值接近真实值。
思路和之前的logistic regression和线性回归模型一样,也是先构建代价函数,然后通过梯度下降法使代价方程的值降到最低点,也就得到了合适的\(\omega\)和\(b\)。
而使用梯度下降法时,需要计算每个\(\omega\)和\(b\)的梯度,梯度的绝对值越大,说明当前的代价函数对该参数的改变越敏感,改变这个参数使代价函数下降的越快。

微积分公式推导

3B1B视频中的网络为例:

代价方程可以由最后一层的激活值\(a^{(L)}\)和真实值y的均方误差:\((a^{(L)}-y)^2\)表示。(PS:这里L=4,有些教材计算均方误差时乘上\(1/2\))
然后,我们要求解\(\omega\)和\(b\)的梯度。
在这里以\(\frac{C_0}{\partial \omega^{(L)}}\)为例:

求梯度,也就是求代价函数对参数变化的敏感度。
可以发现,改变\(\omega^{(L)}\),会先影响到\(z^{(L)}\),然后再影响到\(a^{(L)}\),最后影响\(C_0\)。
利用这个特性,可以将\(\frac{C_0}{\partial \omega^{(L)}}\)分解:

这就是所谓的链式法则(Chain rule):
\[\begin{split}
\frac{C_0}{\partial \omega^{(L)}}=&\frac{\partial z^{(L)}}{\partial \omega^{(L)}}\frac{\partial a^{(L)}}{\partial z^{(L)}}\frac{\partial C_0}{\partial a^{(L)}}\\=&a^{L-1}\sigma\prime(z^{(L)})2(a^{(L)}-y)
\end{split}\]

同样也可以求得\(b^{(L)}\)的梯度:

以上的网络每层只有一个神经元,如果有多个单元的话,以上的公式也是成立的。
之前提过,权重矩阵是二维的,可以给两个下标\(j,k\)表示\(\omega\):

链式法则更新如下:
\[
\begin{split}\frac{C_0}{\partial \omega_{jk}^{(L)}}&= \frac{\partial z_j^{(L)}}{\partial \omega_{jk}^{(L)}}\frac{\partial a_j^{(L)}}{\partial z_j^{(L)}}\frac{\partial C_0}{\partial a_j^{(L)}}\&=a^{L-1}_k \sigma\prime(z^{(L)}_j)2(a^{(L)}_j-y_j)
\end{split}\]
而要把这个公式递推到其它层求\(\frac{C}{\partial \omega_{jk}^{(l)}}\)时,只需要变动公式中的\(\frac{\partial C}{\partial a_j^{(l)}}\)即可。
总结如下:

所以,可以发现,计算梯度时,前两项\(a^{l-1}_k ,\sigma\prime(z^{(l)}_j)\)是可以直接算出的,而最后一项,则可以先计算出\(\frac{\partial C0}{\partial a_j^{(L)}}\),然后一层层向前传播即可,反向传播大概也就是这么个意思吧。
Andrew机器学习课程中给出了计算方法,也可以按这个思路去理解了。

TIPS:随机梯度下降法(Stochastic gradient descent)


在之前的batch model中,每次更新权值都要遍历所有的样本然后取均值,这样效率太低,可以把样本分成数个大小相等的mini-batch,每次遍历完一个mini-batch,就更新下权值,虽然下降的路线未必最短,但速度上提升不少,这就是随机梯度下降算法。

时间: 2024-10-18 07:32:35

[Machine Learning]学习笔记-Neural Networks的相关文章

Machine Learning 学习笔记

Machine Learning 学习笔记在海军陆战队服役超过 10 年后,我于去年 7 月份退役了.随后在 8 月份找到了一份赌场的工作做公关,到今年 2 月中旬的时候又被辞退了.到 5 月中旬的时候我在 DE 协会找到了一份临时的"初级用户体验工程师"工作,而到了 8 月底我则成了正式的"用户体验工程师". 当我丢掉赌场的那份工作时,我就在想公关这行可能真的不适合我.我想做一名程序员.于是我开始节衣缩食学习编程.家人对我的情况非常担心.从 2 月份到 5 月份的

Coursera Machine Learning 学习笔记(一)

之前就对Machine Learning很感兴趣,假期得闲看了Coursera Machine Learning 的全部课程,整理了笔记以便反复体会. I. Introduction (Week 1) - What is machine learning 对于机器学习的定义,并没有一个被一致认同的答案. Arthur Samuel (1959) 给出对机器学习的定义: 机器学习所研究的是赋予计算机在没有明确编程的情况下仍能学习的能力. Samuel设计了一个西洋棋游戏,他让程序自己跟自己下棋,并

[Python & Machine Learning] 学习笔记之scikit-learn机器学习库

1. scikit-learn介绍 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上.值得一提的是,scikit-learn最先是由David Cournapeau在2007年发起的一个Google Summer of Code项目,从那时起这个项目就已经拥有很多的贡献者了,而且该项目目前为止也是由一个志愿者团队在维护着. scikit-learn最大的特点就是,为用户提供各种机器学习算法接口,可以让用户简单.高效地进行数

machine learning学习笔记

看到Max Welling教授主页上有不少学习notes,收藏一下吧,其最近出版了一本书呢还,还没看过. http://www.ics.uci.edu/~welling/classnotes/classnotes.html Statistical Estimation [ps]- bayesian estimation- maximum a posteriori (MAP) estimation- maximum likelihood (ML) estimation- Bias/Variance

Coursera Machine Learning 学习笔记(六)

- Gradient descent 梯度下降算法是一个用来求得函数最小值的算法,这里我们将使用梯度下降算法来求出代价函数的最小值. 梯度下降的思想是:开始的时候我们随机选择一个参数的组合并计算代价函数,之后我们寻找下一个能使得代价函数值下降最多的参数的组合. 我们持续如此过程直到一个局部最小值(local minimum),由于我们并没有完全尝试完所有参数的组合,所以我们不能够确定我们得到的局部最小值是否为全局最小值(global minimum),而且选择不同的参数组合,我们可能会找到不同的

Coursera Machine Learning 学习笔记(二)

- Supervised Learning 对于监督学习我们先看一个例子,下图中表示的是一个房价预测的例子.图中横坐标表示房屋占地面积,纵坐标表示房屋交易价格.图中的每个叉则表示一个房屋实例. 现在,我们希望能够预测一个房屋占地面积为750平方英尺的房屋的交易价格是多少.简单的方法是根据这些数据点的分布,画出一条合适的直线,然后根据这条直线来预测.当然,在此房价预测例子中,一个二次函数更加适合已有数据的分布.因此,我们可能会更加希望使用这个二次函数的曲线来进行房价预测. 因此,我们称上述这样的学

Machine Learning学习笔记(1)

1.机器学习可以做什么? 搜索引擎.垃圾邮件过滤.人脸识别等等,不仅用于人工智能领域,生物.医疗.机械等很多领域都有应用. 2.机器学习的定义 A computer program is said to learn from experience E with respect to some task T and some performance measure P,if its performance on T,as measured by P,improves with experience

Coursera Machine Learning 学习笔记(四)

 II. Linear Regression with One Variable (Week 1) - Model representation 以之前预测房价的问题为例,假设我们回归问题的训练集(Training Set)如下所示: 我们用如下符号来描述回归问题中的量: - m 代表训练集中实例的数量 - x 代表特征/输入变量 - y 代表目标变量/输出变量 - (x,y) 代表训练集中的实例 -  代表第i个观察实例 - h 代表学习算法的解决方案或函数,也称为假设(hypothesi

Coursera Machine Learning 学习笔记(三)

- Unsupervised Learning 在监督学习中,无论是回归问题还是分类问题,我们所用到数据都有明确的标签或相应的预测结果. 而在非监督学习中,我们现有的数据没有相应的结果或标签,有的只是特征.因此,非监督学习要解决的问题是发现这些数据是否可以分为不同的组. 非监督学习的一个典型问题是聚类问题,例如: - 分析大型数据中心网络传输数据情况,分析哪些机器在协同工作. - 社交网络分析 - 市场分割 - 天文数据分析 - 人类基因聚类分析 还有一个经典的例子是鸡尾酒会问题,在一个满是人的