算法工程师修仙之路:吴恩达机器学习(七)

吴恩达机器学习笔记及作业代码实现中文版

第六章 神经网络学习


非线性假设

  • 无论是线性回归还是逻辑回归都有这样一个缺点:当特征太多时,计算的负荷会非常大。

  • 使用非线性的多项式项,能够帮助我们建立更好的分类模型。假设我们有非常多的特征,例如大于 100 个变量,我们希望用这 100 个特征来构建一个非线性的多项式模型,结果将是数量非常惊人的特征组合,即便我们只采用两两特征的组合( x 1 x 2 + x 1 x 3 + x 1 x 4 + . . . + x 2 x 3 + x 2 x 4 + . . . + x 9 9 x 1 00 x_1x_2 +x_1x_3 + x_1x_4+. . . +x_2x_3 + x_2x_4+. . . +x_99x_100 ),我们也会有接近 5000 个组合而成的特征。这对于一般的逻辑回归来说需要计算的特征太多了。

  • 假设我们希望训练一个模型来识别视觉对象(例如识别一张图片上是否是一辆汽车),一种方法是我们利用很多汽车的图片和很多非汽车的图片,然后利用这些图片上一个个像素的值(饱和度或亮度)来作为特征。

  • 假如我们只选用灰度图片,每个像素则只有一个值(而非 RGB 值),我们可以选取图片上的两个不同位置上的两个像素,然后训练一个逻辑回归算法利用这两个像素的值来判断图片上是否是汽车:
    在这里插入图片描述

  • 假使我们采用的都是 50x50 像素的小图片,并且我们将所有的像素视为特征,则会有2500 个特征,如果我们要进一步将两两特征组合构成一个多项式模型,则会有约 250 0 2 / 2 2500^2/2 个(接近 3 百万个)特征。普通的逻辑回归模型,不能有效地处理这么多的特征,这时候我们需要神经网络。

模型展示

  • 神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。

  • 在神经网络中,参数又可被成为权重( weight)。

  • 我们设计出了类似于神经元的神经网络,效果如下:

    • 其中 x 1 , x 2 , x 3 x_1, x_2, x_3 是输入单元( input units),我们将原始数据输入给它们。
    • a 1 , a 2 , a 3 a_1, a_2, a_3 是中间单元,它们负责将数据进行处理,然后呈递到下一层。
    • 最后是输出单元,它负责计算 h θ ( x ) ℎ_\theta(x)
      在这里插入图片描述
  • 神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。

  • 下图为一个 3 层的神经网络,第一层称为输入层( Input Layer),最后一层称为输出层( Output Layer),中间一层称为隐藏层( Hidden Layers)。我们为每一层都增加一个偏差单位( bias unit):

    • a i ( j ) a_i^{(j)} 代表第 j j 层的第 i i 个激活单元。 θ ( j ) \theta^{(j)} 代表从第 j j 层映射到第 j + 1 j+1 层时的权重的矩阵,例如 θ ( 1 ) \theta^{(1)} 代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第 j + 1 j+1 层的激活单元数量为行数,以第 j j 层的激活单元数加一为列数的矩阵。例如:下图所示的神经网络中 θ ( 1 ) \theta^{(1)} 的尺寸为 3*4。
      在这里插入图片描述
    • 对于上图所示的模型,激活单元和输出分别表达为:
      • 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 ) = g ( θ 10 ( 2 ) a 0 ( 2 ) + θ 11 ( 2 ) a 1 ( 2 ) + θ 12 ( 2 ) a 2 ( 3 ) + θ 13 ( 2 ) a 3 ( 2 ) ) h_\theta(x)=g(\theta_{10}^{(2)}a_0^{(2)}+\theta_{11}^{(2)}a_1^{(2)}+\theta_{12}^{(2)}a_2^{(3)}+\theta_{13}^{(2)}a_3^{(2)})
    • 每一个 a a 都是由上一层所有的 x x 和每一个 x x 所对应的权重决定的。
    • 我们把这样从左到右的算法称为前向传播算法(forword-propagation)。
    • x x θ \theta a a 分别用矩阵表示, 我们可以得到 X X * θ \theta = a a
      在这里插入图片描述
  • 前向传播算法相对于使用循环来编码,利用向量化的方法会使得计算更为简便。

    • 以上面的神经网络为例,试着计算第二层的值:
      在这里插入图片描述
    • 我们令 z ( 2 ) = θ ( 1 ) x z^{(2)}=\theta^{(1)}x ,则 a ( 2 ) = g ( z ( 2 ) ) a^{(2)}=g(z^{(2)}) ,计算后添加 a 0 ( 2 ) a_0^{(2)}
    • 计算输出的值为:
      在这里插入图片描述
    • 这只是针对训练集中一个训练实例所进行的计算。
  • 如果我们要对整个训练集进行计算,我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。

    • z ( 2 ) = Θ ( 1 ) X T z^{(2)}=\Theta^{(1)}X^T
    • a ( 2 ) = g ( z ( 2 ) ) a^{(2)}=g(z^{(2)})
  • 我们可以把 a 0 , a 1 , a 2 , a 3 a_0, a_1, a_2, a_3 看成更为高级的特征值,也就是 x 0 , x 1 , x 2 , x 3 x_0, x_1, x_2, x_3 的进化体,并且它们是由 x x 与权重决定的,因为是梯度下降的,所以 a a 是变化的,并且变得越来越厉害,所以这些更高级的特征值远比仅仅将 x x 取更高次方厉害,也能更好的预测新数据。这就是神经网络相比于逻辑回归和线性回归的优势。

猜你喜欢

转载自blog.csdn.net/faker1895/article/details/84784614