【机器学习】神经网络 I

本文为机器学习的学习总结,讲解神经网络。欢迎交流

非线性假设

如果我们有一个分类问题,其训练集如下:

在这里插入图片描述

如果我们使用逻辑回归模型进行拟合,这样复杂的图形需要高阶多项式,而当特征变量数量增加时,其二次项会呈 O ( n 2 ) O(n^2) 的速度增长,即解空间会随着特征变量的增加而急剧膨胀。这样的模型很容易出现过拟合的问题,并且计算量极大。但如果选取的特征变量较少时,很难拟合出上图中复杂的决策边界。

例如下面的例子,我们构造一个识别汽车的分类器。为画图方便,取车上的 2 个像素点,画出训练集如下:

在这里插入图片描述

此时汽车与非汽车被分为两类:

在这里插入图片描述

假设图像是 50×50 像素,则特征空间的维数为 2500。如果要包含所有的二次项特征来学习得到的非线性假设,大约需要 300 万个特征。

因此,在 n n 很大时,简单的逻辑回归模型不是学习复杂的非线性假设的好方法,因为特征过多。而神经网络被证明是学习复杂非线性假设的很好的算法,即使输入特征空间很大也能轻松解决。

神经元与大脑

神经网络算法是一种很古老的算法,但因为计算量过大,后来人们很少使用。随着计算机计算能力的突飞猛进,神经网络算法由出现在人们的视野中。

神经网络起源于人类用计算机对大脑的模拟。神经网络中神经元的连接方式称为神经网络的架构。

模型表示 I

我们使用一个很简单的模型来模拟神经元的工作,将神经元模拟成一个逻辑单元。

在这里插入图片描述

神经元的左边的输入通道传递一些信息,由神经元进行计算,并通过右边的输出通道输出计算到的结果。这里 h θ ( x ) = 1 1 + e θ T x h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}} ,其中 x , θ x,\theta 分别为特征和参数的列向量。有时我们还会在输入层添加一个额外结点 x 0 x_0 ,被称为偏置神经元。在神经网络中,激活函数代指非线性函数 g ( z ) = 1 1 + e z g(z)=\frac{1}{1+e^{-z}} ,参数 θ \theta 被称为权重。

神经网络的计算步骤如下:
a 1 ( 2 ) = g ( Θ 10 ( 1 ) x 0 + Θ 11 ( 1 ) x 1 + Θ 12 ( 1 ) x 2 + Θ 13 ( 1 ) x 3 ) a_1^{(2)}=g(\Theta_{10}^{(1)}x_0+\Theta_{11}^{(1)}x_1+\Theta_{12}^{(1)}x_2+\Theta_{13}^{(1)}x_3)

a 2 ( 2 ) = g ( Θ 20 ( 1 ) x 0 + Θ 21 ( 1 ) x 1 + Θ 22 ( 1 ) x 2 + Θ 23 ( 1 ) x 3 ) a_2^{(2)}=g(\Theta_{20}^{(1)}x_0+\Theta_{21}^{(1)}x_1+\Theta_{22}^{(1)}x_2+\Theta_{23}^{(1)}x_3)

a 3 ( 2 ) = g ( Θ 30 ( 1 ) x 0 + Θ 31 ( 1 ) x 1 + Θ 32 ( 1 ) x 2 + Θ 33 ( 1 ) x 3 ) a_3^{(2)}=g(\Theta_{30}^{(1)}x_0+\Theta_{31}^{(1)}x_1+\Theta_{32}^{(1)}x_2+\Theta_{33}^{(1)}x_3)

h Θ ( x ) = a 1 ( 3 ) = g ( Θ 10 ( 2 ) a 0 ( 2 ) + Θ 11 ( 2 ) a 1 ( 2 ) + Θ 12 ( 2 ) a 2 ( 2 ) + Θ 13 ( 2 ) a 3 ( 2 ) ) 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)})

我们用 a i ( j ) a_i^{(j)} 表示第 j j 层中第 i i 个神经元的激活项,即输出值。 Θ ( j ) \Theta^{(j)} 为控制从第 j j 层到第 j + 1 j+1 层映射的参数矩阵,维度为 s j + 1 × s j s_{j+1}×s_j ,其中 s j s_j 表示第 j j 层的神经元个数。通过改变 Θ \Theta ,我们得到不同的假设(函数)。

模型表示 II

我们需要高效计算,并展示一个向量化的实现方法,可以帮助我们学习复杂的非线性假设函数。

在神经网络的计算步骤中,我们将 g g 函数括号内的部分定义为 z 1 ( 2 ) z^{(2)}_1 ,有 a 1 ( 2 ) = g ( z 1 ( 2 ) ) a_1^{(2)}=g(z^{(2)}_1) 。激活项的计算中,可以将其对应到矩阵乘法。设 x = [ x 0 x 1 x 2 x 3 ] , x 0 = 1 x=\left[ \begin{matrix} x_0\\ x_1\\x_2\\x_3 \end{matrix} \right],x_0=1 z ( 2 ) = [ z 1 ( 2 ) z 2 ( 2 ) z 3 ( 2 ) ] z^{(2)}=\left[ \begin{matrix} z_1^{(2)}\\ z_2^{(2)}\\z_3^{(2)} \end{matrix} \right] 。激活项的计算可以参数化为:
z ( 2 ) = Θ ( 1 ) x z^{(2)}=\Theta^{(1)}x

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

g g 作用于 z ( 2 ) z^{(2)} 中的每个元素。因为 x x 为第一层的激活项,为符号统一,定义 x = a ( 1 ) x=a^{(1)} ,则此时 z ( 2 ) = Θ ( 1 ) a ( 1 ) z^{(2)}=\Theta^{(1)}a^{(1)} 。再加上偏置神经元 a 0 ( 2 ) = 1 a^{(2)}_0=1 ,则:
z ( 3 ) = Θ ( 2 ) a ( 2 ) z^{(3)}=\Theta^{(2)}a^{(2)}

h Θ ( x ) = a ( 3 ) = g ( z ( 3 ) ) h_\Theta(x)=a^{(3)}=g(z^{(3)})

这种方式称为前向传播

我们盖住左边的部分,最右边的部分是一个逻辑回归模型:

在这里插入图片描述

神经网络中,算法自己训练逻辑回归模型中的输入特征 a 1 , a 2 , a 3 a_1,a_2,a_3 ,因此逻辑回归模型将得到更复杂的特征,从而实现更多的功能。

多元分类

数字识别是一个典型的神经网络用于多元分类问题的例子,我们再举一个例子来说明如何将神经网络运用到多元分类问题上。

有行人、汽车、摩托车、火车 4 类图片,我们需要将输入的图片进行分类。建立一个有 4 个输出单元的神经网络,则此时 h Θ ( x ) R 4 h_\Theta(x)\in \mathbb{\mathbb{R}}^4 ,输出变为了 4 维的向量。

在这里插入图片描述

我们用 4 个输出单元分别判断是否是行人、汽车、摩托车、火车。当为行人时,网络输出 h Θ ( x ) [ 1 0 0 0 ] h_\Theta(x)≈\left[ \begin{matrix} 1\\ 0\\0\\0 \end{matrix} \right] ,其余同理。

在训练集中, y ( i ) y^{(i)} 用 4 维列向量表示 4 种不同的物体, x ( i ) x^{(i)} 为 4 种物体中的一种。因此训练集表示为 ( x ( 1 ) , y ( 1 ) ) , , ( x ( m ) , y ( m ) ) (x^{(1)},y^{(1)}),…,(x^{(m)},y^{(m)}) 。我们希望找到一个方法,让 h Θ ( x ) = y ( i ) h_\Theta(x)=y^{(i)}

猜你喜欢

转载自blog.csdn.net/weixin_44413191/article/details/107825890