机器学习笔记5 神经网络1 模型表达

Andrew Ng cs229 Machine Learning 笔记

神经网络

非线性假设

在特征变量数较大的情况下,采用线性回归会很难处理,比如我的数据集有3个特征变量,想要在假设中引入所有特征变量的平方项:

$$g(\theta_0 + \theta_1x_1^2 + \theta_2x_1x_2 + \theta_3x_1x_3 + \theta_4x_2^2 + \theta_5x_2x_3 + \theta_6x_3^2 )$$

共有6个特征,假设我们想知道选取其中任意两个可重复的平方项有多少组合,采用允许重复的组合公式计算$\frac{(n+r-1)!}{r!(n-1)!}$,共有$\frac{(3 + 2 - 1)!}{(2!\cdot (3-1)!)} = 6$种特征变量的组合。对于100个特征变量,则共有$\frac{(100 + 2 - 1)!}{(2\cdot (100-1)!)} = 5050$个新的特征变量。

可以大致估计特征变量的平方项组合个数的增长速度为$\mathcal{O}(\frac{n^2}2)$,立方项的组合个数的增长为$\mathcal{O}(n^3)$。这些增长都十分陡峭,让实际问题变得很棘手。

在变量假设十分复杂的情况下,神经网络提供了另一种机器学习算法。

神经元和大脑

神经网络是对大脑工作方式的一种简单模拟。有证据表明,大脑对所有的功能(如视觉,触觉,听觉等)都采用了一种“学习算法”。将听觉皮层和视觉神经连接到一起,听觉皮层可以学会“看见”。这种理论叫作“neuroplasticity”,已经得到了很多例子和实验验证。

模型表达

简单来说,每个神经元都有输入(树突dendrites)和输出(轴突axons)。在模型中,输入就是我们的特征变量,输出就是模型假设的结果。

在神经网络中,分类问题通常采用logistic函数,也叫做sigmoid激活函数(sigmoid activation function)。$\theta$参数有时也被称为权重(weights)。

下面是一种简单的神经网络:

hugo-server-1

第一层是输入节点(nodes),第二层是输出节点,也就是我们假设函数的结果$h_{\theta}(x)$。

第一层叫作“输入层”(input layer),最后一层叫作“输出层”(output layer),输入层和输出层之间还可以有多层,统称为“隐藏层”(hidden layer)。如下图中,第二层就叫隐藏层。隐藏层节点表示为$a^2_0 \cdots a^2_n$,被称作“激活单元(activation units)”。

hugo-server-1

$a_i^{(j)}$表示第$j$层的$i$单元被“激活”,$\Theta^{(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*} $$

每一层都有自己的权重矩阵$\Theta^{(j)}$,如果第$j$层有 $s_j$ 个单元,第$j+1$层有$s_{j+1}$个单元,则$\Theta^{(j)}$是$s_{j+1} \times (s_j+1)$的矩阵。”+1”是因为第$j$层包括一个”偏差节点(bias nodes)“,$x_0$和$\Theta_0^{(j)}$。换句话说,输出节点不包括偏差节点,但输入节点会包括偏差节点。

举个例子,第一层有2个输入节点,第二层有4个激活单元。$\Theta^{(1)}$的维度为$4 \times 3$。

下面将以上模型表达向量化。

采用$z^{(i)}_k$表示$g$函数的输入,那么有:

$$ \begin{align*} a_1^{(2)} = g(z_1^{(2)}) \newline a_2^{(2)} = g(z_2^{(2)}) \newline a_3^{(2)} = g(z_3^{(2)}) \newline \end{align*} $$

给定第$j$层的节点$k$,变量$z$等于:

$$ z_k^{(j)} = \Theta_{k,0}^{(j-1)}x_0 + \Theta_{k,1}^{(j-1)}x_1 + \cdots + \Theta_{k,n}^{(j-1)}x_n $$
$x$和$z^{(j)}$的向量表示为:
$$ \begin{align*} x = \begin{bmatrix} x_0 \newline x_1 \newline \cdots \newline x_n \end{bmatrix} & z^{(j)} = \begin{bmatrix} z_1^{(j)} \newline z_2^{(j)} \newline \cdots \newline z_n^{(j)} \end{bmatrix} \end{align*} $$

因此,$z^{(j}) = \Theta^{(j-1)} x$

令$x = a^{(j-1)}$,则$z^{(j)} = \Theta^{(j-1)}a^{(j-1)}$

最后的结果为

$$ h_\Theta(x) = a^{(j+1)} = g(z^{(j+1)}) = g(\Theta^{(j)}a^{(j)}) $$

神经网络拟合逻辑运算

  1. $x_1\ AND\ x_2$

神经网络模型:

$$ \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*} $$

其中,$x_0$为偏差,恒等于1。

权重参数为:

$\Theta^{(1)} = \begin{bmatrix} -30 & 20 & 20 \end{bmatrix}$

仅当$x_1$和$x_2$同时为1时,$h_{\Theta}(x) = 1$。

\begin{align*} & h_\Theta(x) = g(-30 + 20x_1 + 20x_2) \newline \newline & x_1 = 0 \ \ and \ \ x_2 = 0 \ \ then \ \ g(-30) \approx 0 \newline & x_1 = 0 \ \ and \ \ x_2 = 1 \ \ then \ \ g(-10) \approx 0 \newline & x_1 = 1 \ \ and \ \ x_2 = 0 \ \ then \ \ g(-10) \approx 0 \newline & x_1 = 1 \ \ and \ \ x_2 = 1 \ \ then \ \ g(10) \approx 1 \end{align*}
  1. $x_1\ NOR\ x_2$, $NOR$为$NOT\ OR$

模型同上,权重参数为:

$\Theta^{(1)} = \begin{bmatrix} 10 & -20 & -20 \end{bmatrix}$

仅当$x_1$和$x_2$同时为0时,$h_{\Theta}(x) = 1$。

  1. $x_1\ OR\ x_2$

模型同上,权重参数为:

$\Theta^{(1)} = \begin{bmatrix} -10 & 20 & 20 \end{bmatrix}$

当$x_1$和$x_2$不同时为0时,$h_{\Theta}(x) = 1$。

  1. $x_1\ XNOR\ x_2$,$XNOR$为$NOT\ XOR$

将前面得到的模型组合起来$x_1\ XNOR\ x_2 = (x_1\ AND\ x_2)\ OR\ (x_1\ XOR\ x_2)$

模型如下:

$$ \begin{align*} \begin{bmatrix} x_0 \newline x_1 \newline x_2 \end{bmatrix} \rightarrow \begin{bmatrix} a_1^{(2)} \newline a_2^{(2)} \end{bmatrix} \rightarrow \begin{bmatrix} a^{(3)} \end{bmatrix} \rightarrow h_\Theta(x) \end{align*} $$

第一层到第二层的$\Theta^{(1)}$分别表示$AND$和$NOR$操作:

$$ \Theta^{(1)} = \begin{bmatrix} -30 & 20 & 20 \newline 10 & -20 & -20 \end{bmatrix} $$

第二层到第三层的$\Theta^{(2)}$表示$OR$操作:

$$ \Theta^{(2)} = \begin{bmatrix}-10 & 20 & 20\end{bmatrix} $$

多类分类问题

输出用向量来表示多类分类问题:

$$ \begin{align*} \begin{bmatrix} x_0 \newline x_1 \newline x_2 \newline \cdots \newline x_n \end{bmatrix} \rightarrow \begin{bmatrix} a_0^{(2)} \newline a_1^{(2)} \newline a_2^{(2)} \newline \cdots \end{bmatrix} \rightarrow \begin{bmatrix} a_0^{(3)} \newline a_1^{(3)} \newline a_2^{(3)} \newline \cdots \end{bmatrix} \rightarrow \cdots \rightarrow \begin{bmatrix} h_\Theta(x)_1 \newline h_\Theta(x)_2 \newline h_\Theta(x)_3 \newline h_\Theta(x)_4 \newline \end{bmatrix} \rightarrow \end{align*} $$

最后的结果:

$$h_\Theta(x) = \begin{bmatrix} 0 \newline 0 \newline 1 \newline 0 \newline \end{bmatrix}$$

表示该样本属于第三类,$h_{\Theta}(x)_3$。