雅乐网

计算机技术、学习成长

数学 » 机器学习 » Andrew Ng机器学习课程笔记4——神经网络:表达

Andrew Ng机器学习课程笔记4——神经网络:表达

神经网络是受人脑的启发而出现的模型,目前得到了广泛应用,例如语音识别和手写体识别。

一、引入

1. 非线性假设

假设有两个特征,使用最多二次项来预测,则有

$$h(x) = g( \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_1^2 + \theta_4 x_1x_2 + \theta_5 x_2^2)$$

此时用前面介绍的增加特征值表示多项式模型是可以的。但是当特征增多的时候,例如有n = 100个特征x1到x100,那么二次项有多少个呢?

应该是这100项自己的平方,共100个;加上取出2个的数目,\(C_{100}^{2}\) 。一共有

$$\frac{n(n-1)}{2} + n \approx  \frac{n^2}{2}$$

这大概是n的平方的数量级。当特征非常多时(处理图片,每个像素是一个特征),这样计算复杂度非常大。

神经网络可以有效的处理特征很多的情形。

2. 神经网络和大脑

神经网络兴起于上世纪80年代,但后来应用逐渐减少。最近几年又重新流行起来,因为它需要较大的计算量,由于近年来计算速度的发展,使得它可以发挥作用。

实验表明,人的大脑虽然有不同分区,但似乎每个分区都可以学习其他分区的功能。

二、神经网络的表示和计算

1. 神经元

神经元核心部分(Nucleus)相当于处理单元(processing unit),它有许多树突(Dendrite)用于输入(input),有一个轴突(Axon)用于输出(output)。许多神经元相互连接形成神经网络。

scrn20160406135735

2. 神经网络模型

scrn20160406193450

上图是一个3层的神经网络,从左到右依次是第1层,第2层,第3层。第1层就是输入,因此叫做输入层(input layer);最后一层是输出,叫做输出层(output layer)。中间的叫做隐藏层(Hidden layer)。每一层都有一个额外添加的偏差单位(图中下标为0的结点,它们的输出值总是1)。

图中每个结点类似于一个神经元,叫做激活单元(activation unit)。它的上标代表第几层,输入层也可以看做第1层激活单元,例如图中x1也可以看做\(a_{1}^{1}\),x2也可以看做\(a_{2}^{1}\)。每个结点接收多个输入,有一个输出。 单个的结点的计算方法和逻辑回归中的计算方法相同

回忆逻辑回归中

$$h(x) = g(\theta^T x) = g(\theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 + … + \theta_n x_n)$$

其中

$$g(z) = \frac{1}{1 + e^{-z}}$$

现在先看一下\(a_{1}^{(2)}\)结点的计算方法

scrn20160406193005

$$a_1^{(2)} = g(\theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3)$$

类似的,对结点\(a_{2}^{(2)}\),

scrn20160406193032

也有

$$a_2^{(2)} = g(\theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3)$$

不过,上面两个结点的计算公式中的 \(\theta\)是不同的。怎么进行区分呢?使用一个矩阵记录就行了。把计算第一个结点的参数值放到矩阵的第1行,计算第二个结点的参数值放到矩阵的第二行。矩阵用大写的\(\Theta\)表示,这就有

$$a_1^{(2)} = g(\Theta_{10} x_0 + \Theta_{11} x_1 + \Theta_{12} x_2 + \Theta_{13} x_3)$$

$$a_2^{(2)} = g(\Theta_{20} x_0 + \Theta_{21} x_1 + \Theta_{22} x_2 + \Theta_{23} x_3)$$

$$a_3^{(2)} = g(\Theta_{30} x_0 + \Theta_{31} x_1 + \Theta_{32} x_2 + \Theta_{33} x_3)$$

\(\Theta\)的第i行表示第i个结点计算时的参数,而第j列表示所有结点对第j个输入的参数。

显然,矩阵的行数对应要计算的结点数;矩阵的列数对应输入的个数。

矩阵中的每个元素对应了图中的一条线,因此有时叫做权值(weight)。

scrn20160406183520

图中红色的三条线,x1出发的线代表计算 \(a_{2}^{(2)}\) 时,x1的系数,对应矩阵中的\(\Theta_{21}\);

x2出发的线代表计算 \(a_{2}^{(2)}\) 时,x2的系数,对应矩阵中的\(\Theta_{22}\);

x3出发的线代表计算 \(a_{2}^{(2)}\) 时,x3的系数,对应矩阵中的\(\Theta_{23}\) 。

目前为止,\(\Theta\)矩阵记录了所有第1层到第2层的参数。但神经网络有很多层,那就需要多个这样的矩阵。我们使用上标来区分,上标i表示第i层到第i+1层计算时的参数,这样上面的矩阵\(\Theta\)就记作\(\Theta^{(1)}\)。此时,\(\Theta\)就代表是一系列矩阵了。\(\Theta^{(2)}\)表示第2层到第3层的参数,我们可以得到

$$h_{\theta}(x) = a^{(3)}_1 = 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)})$$

如果用\(s_j\)表示神经网络中第j层的结点个数(不包含偏置结点),那么矩阵\(\Theta^{(j)}\)就是第j层到第j+1层的参数,有\(s_{j+1}\)行,有\(s_j + 1\)列。

3. 计算:正向传播

仍然是这个神经网络

scrn20160406193450

先来看第1层到第2层,为了统一已经把输入x替换为\(a^{(1)}\)

$$a_1^{(2)} = g(\Theta_{10}^{(1)} a^{(1)}_0 + \Theta_{11}^{(1)} a^{(1)}_1 + \Theta_{12}^{(1)} a^{(1)}_2 + \Theta_{13}^{(1)} a^{(1)}_3)$$

$$a_2^{(2)} = g(\Theta_{20}^{(1)} a^{(1)}_0 + \Theta_{21}^{(1)} a^{(1)}_1 + \Theta_{22}^{(1)} a^{(1)}_2 + \Theta_{23}^{(1)} a^{(1)}_3)$$

$$a_3^{(2)} = g(\Theta_{30}^{(1)} a^{(1)}_0 + \Theta_{31}^{(1)} a^{(1)}_1 + \Theta_{32}^{(1)} a^{(1)}_2 + \Theta_{33}^{(1)} a^{(1)}_3)$$

写成矩阵的形式

$$\begin{bmatrix}a_1^{(2)}\\a_2^{(2)}\\a_3^{(2)}\\ \end{bmatrix} = g( \begin{bmatrix}
\Theta_{10}^{(1)} a^{(1)}_0 + \Theta_{11}^{(1)} a^{(1)}_1 + \Theta_{12}^{(1)} a^{(1)}_2 + \Theta_{13}^{(1)} a^{(1)}_3 \\
\Theta_{20}^{(1)} a^{(1)}_0 + \Theta_{21}^{(1)} a^{(1)}_1 + \Theta_{22}^{(1)} a^{(1)}_2 + \Theta_{23}^{(1)} a^{(1)}_3 \\
\Theta_{30}^{(1)} a^{(1)}_0 + \Theta_{31}^{(1)} a^{(1)}_1 + \Theta_{32}^{(1)} a^{(1)}_2 + \Theta_{33}^{(1)} a^{(1)}_3 \\
\end{bmatrix} ) $$

$$= g(\begin{bmatrix}
\Theta_{10}^{(1)} & \Theta_{11}^{(1)} & \Theta_{12}^{(1)} & \Theta_{13}^{(1)} \\
\Theta_{20}^{(1)} & \Theta_{21}^{(1)} & \Theta_{22}^{(1)} & \Theta_{23}^{(1)} \\
\Theta_{30}^{(1)} & \Theta_{31}^{(1)} & \Theta_{32}^{(1)} & \Theta_{33}^{(1)} \\
\end{bmatrix} \times \begin{bmatrix}
a_{0}^{(1)} \\
a_{1}^{(1)} \\
a_{2}^{(1)} \\
a_{3}^{(1)} \\
\end{bmatrix})$$

向量化的计算方法,即

$$a^{(2)} = g(\Theta^{(1)} \times a^{(1)})$$

我们记\(z^{(2)} = \Theta^{(1)} \times a^{(1)} \),则有

$$a^{(2)} = g(z^{(2)})$$

再来看第2层到第3层,添加\(a_0^{(2)}\)后,有

$$h_{\theta}(x) = a^{(3)}_1 = 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)})$$

向量化后,令

$$z^{(3)} = \Theta^{(2)} \times a^{(2)} $$

则有

$$a^{(3)} = g(z^{(3)})$$

最终有

$$h_{\theta}(x) = a^{(3)} = g(z^{(3)})$$

这种计算方法从左到右一层一层计算,因此叫做正向传播算法。神经网络中每一层的输出都是下一层的输入,这样随着层数的增加,可以处理越来越复杂的问题。

三、实例:逻辑计算

输入特征为布尔值(0或1)时,可以用一个激活层表示二元逻辑运算符。例如下图(权值-30,+20,+20)

scrn20160406202000

表示的是与(AND)运算。

$$h_{\theta}(x) = g(-30 + 20 x_1 + 20 x_2)$$

而g(z)函数图象如下

scrn20160330190056

x1和x2都为1的时候,g(10)输出近似为1

若不全为1,则g(负数)输出近似为0

类似的,下图表示或(OR)运算

scrn20160406202247

下图表示非(NOT)运算

scrn20160406202332

可以组合多层来表示更复杂的运算

scrn20160406202458

这正是神经网络的神奇之处。

四、多分类问题

和逻辑回归中介绍的One-VS-All类似,使用多个输出,每个输出对应一个类

scrn20160407122653

 

如果文章对你有帮助,欢迎点赞或打赏(金额不限)。你的打赏将全部用于支付网站服务器费用和提高网站文章质量,谢谢支持。

版权声明:

本文由 原创,商业转载请联系作者获得授权。
非商业转载请注明作者 雅乐网 ,并附带本文链接:
http://www.yalewoo.com/andrew_ng_machine_learning_notes_4_neural_networks_representation.html

上一篇:

下一篇:

我要评论

验证码*: 6 + 3 =