机器学习从入门到XX(五):神经网络模型

神经网络

神经网络(Neural Network)是一种十分强大的机器学习算法。神经网络的模型相似脑细胞传递神经信号的方式。下面是单个脑细胞的示意图:算法

clipboard.png

一个脑细胞经过多个树突接收某种电信号,而后经过轴突将信号传递给下一个脑细胞。大量的脑细胞彼此相连就会造成一个极其庞大的网络。神经网络算法正是模拟了脑细胞传播电信号的过程。网络

下面是经过课程做业,实现的一个手写体数字识别的机器学习例子。采用的是神经网络算法实现的多元分类问题。在这个例子中,咱们试图将一张点阵图识别成0-9的数字,所以,该分类问题的分类结果总共有10类,输入则是每一张20x20的点阵图像素组成的向量。机器学习

nn手写体识别测试

模型表示

让咱们来看看如何表示神经网络的假设函数。能够把单个神经元当作是一个接收输入信号,通过必定的“激励”后,输出信号的单元。在咱们的模型中,输入就比如特征向量x1⋯xn,输出则是假设函数的值。针对输入向量,咱们会增长一个x0项,称为误差单元(bias unit),而且老是为1。使用神经网络解决分类问题时,咱们使用g函数$ \frac{1}{1 + e^{-\theta^Tx}} $来做为激励函数。特征向量在输入神经元前,会有一个表示不一样特征权重的向量做用于输入向量,也就是说特征向量在输入前会通过θ向量进行弱化或强化。函数

clipboard.png

输入节点也称为输入层,输出节点也称为输出层。只有输入层输出层的神经网路其实跟逻辑回归模型没有区别。咱们能够在输入层和输出层以前增长若干隐藏层,隐藏层中的单元也叫激励单元(activation units)学习

clipboard.png

  • $ a^{(j)}_i $记做第j层的第i个激励值
  • $ Θ^{(j)} $记做从第j层向第j+1层传播时的权重矩阵

每一个激励值的计算方法以下:测试

$$ \begin{align*} a_1^{(2)} = g(\Theta_{10}^{(1)}x_0 + \Theta_{11}^{(1)}x_1 + \Theta_{12}^{(1)}x_2 + \Theta_{13}^{(1)}x_3) \newline a_2^{(2)} = g(\Theta_{20}^{(1)}x_0 + \Theta_{21}^{(1)}x_1 + \Theta_{22}^{(1)}x_2 + \Theta_{23}^{(1)}x_3) \newline a_3^{(2)} = g(\Theta_{30}^{(1)}x_0 + \Theta_{31}^{(1)}x_1 + \Theta_{32}^{(1)}x_2 + \Theta_{33}^{(1)}x_3) \newline h_\Theta(x) = a_1^{(3)} = g(\Theta_{10}^{(2)}a_0^{(2)} + \Theta_{11}^{(2)}a_1^{(2)} + \Theta_{12}^{(2)}a_2^{(2)} + \Theta_{13}^{(2)}a_3^{(2)}) \newline \end{align*} $$spa

上式描述的是,用一个3x4的矩阵$ Θ^{(1)} $乘以输入向量,获得激励节点。最终的输出是激励节点通过另外一个1x4矩阵$ Θ^{(2)} $后获得的。不可贵出以下结论:3d

若是第j层有$ s_j $个单元,第j+1层有$ s_{j+1} $个单元,那么$ Θ^{(j)} $的阶数为$ s_{j+1} × (s_j + 1) $。+1源自于每一层的误差单元(bias unit)code

实现逻辑运算

为了更好的理解上述模型,下面经过神经网络算法来训练模型进行逻辑运算。首先先实现一个逻辑或运算$ x_1 $ OR $ x_2 $:blog

clipboard.png

如上图,咱们经过一个简单的2层神经网络实现了一个OR逻辑门。设置$ \Theta_{1} $为:

$$ \Theta_{1}=\begin{bmatrix}-10 \space 20 \space 20\end{bmatrix} $$

记得咱们的g函数$ \frac{1}{1 + e^{-\theta^Tx}} $,咱们能够获得右边的真值表。所以,对于这个神经网络,上述$ \Theta_{1} $就是模型须要习得的参数。

对于这个问题彷佛使用普通的逻辑回归也能解决,那是由于对于逻辑或而言,仍然属于线性问题。可是下面咱们要计算的同或运算,就是非线性问题了:

clipboard.png

咱们能够把同或运算写成以下形式:

$$ (x_1 \space AND \space x_2) \space OR \space ((NOT x_1) \space AND \space (NOT \space x_2)) $$

经过组合,咱们能够获得下面的神经网络:

clipboard.png

这是个3层神经网络,有一个输入层,一个隐藏层(2个激励节点),一个输出层:

$$ \Theta_{1}=\begin{bmatrix}-30\space20\space20\newline -10\space-20\space-20\end{bmatrix} \Theta_{2}=\begin{bmatrix}-10\space20\space20 \end{bmatrix} $$

实现多元分类

上述逻辑运算的例子最后获得的是一个值(即0或1)。不少实际的问题须要咱们解决多元分类问题。其实咱们只要让神经网络输出层包含多个节点便可,例如将一个张图的像素输入,预测图片是什么:

clipboard.png

相关文章
相关标签/搜索