吴恩达机器学习笔记---神经网络前向传播

前言

 1.非线性假设(Non-linear Hypotheses)
 2.模型表示(Model Representation)
 3.向量化(Vectorization)

神经网络表述

(一)非线性假设(Non-linear Hypotheses)

  之前我们学习了线性回归和逻辑回归算法,理论上它们可以解决绝大部分的问题了,但是实际上,当我们的特征逐渐变多的时候,用线性回归和逻辑回归来解决问题通常会导致计算的负荷非常大。例如,当我们用逻辑回归来解决问题的时候,假设有100个特征,如果仅构造两两特征的组合 ( x 1 x 2 + x 1 x 3 + x 1 x 4 + . . . + x 2 x 3 + x 2 x 4 + . . . + x 99 x 100 ) (x_1x_2+x_1x_3+x_1x_4+...+x_2x_3+x_2x_4+...+x_{99}x_{100}) (x1x2+x1x3+x1x4+...+x2x3+x2x4+...+x99x100),就有大约5000个特征了,想要拟合的效果更好,加上三三特征的组合,这时候特征数就有大约170000,用这样庞大的特征量进行拟合,计算量之大可想而知。举个具体的例子,在计算机视觉中,我们实现判断图中是否有小汽车的功能。计算识别图像是通过识别图像的像素来实现的,我们眼中的照片在计算机看来就是一堆数字,计算机通过对数字的分析来判断照片中的内容。假设我们选取照片的这两个地方的像素作为特征输入:
吴恩达机器学习笔记---神经网络前向传播_第1张图片
  我们根据像素点1和像素点2以及对应的照片是否为小汽车,将它们表现在图上,是小汽车和不是小汽车分开表示:
吴恩达机器学习笔记---神经网络前向传播_第2张图片
  例如上图,我们继续增加样本的数量至如图所示,我们要做的就是判定出两种数据的边界曲线。
吴恩达机器学习笔记---神经网络前向传播_第3张图片
  事实上,要想实现该功能,仅依靠两个像素点是不能完成的。假设图片的像素是50x50(像素很低了),如果我们将所有的像素视为特征,则会有 2500个特征,再将特征之间进行两两组合就有大约3百万个特征,这还是图片是灰白的情况,如果是彩色(RGB)的,就会有7500个特征,组合起来就更多了。
  总之,之前所学的模型,不能有效地处理这么多的特征,这时候我们需要神经网络。

(二)模型表示(Model Representation)

  神经网络模型模拟人的大脑来实现计算功能。人的思考过程依赖于神经元和神经元之间信息的传递和处理。信息从神经元的树突传入,经过细胞体的处理,通过轴突将信息传递给下一个神经元。我们将每一个神经元看作是一个学习模型(也叫激活单元,activation unit),将树突看做输入,将细胞体看做运算处理,将轴突看做输出。
  通过这些理解,我们建立一个最简单的神经网络模型(就是只有一个神经元的)。我们将 x 1 , x 2 , x 3 x_{1},x_{2},x_{3} x1,x2,x3作为输入特征输入到神经网络,它们与黄色圆圈之间的连线看作是输入,在黄圆圈里进行运算之后输出给h。
吴恩达机器学习笔记---神经网络前向传播_第4张图片
  再进一步,黄色圆圈里进行的运算是将输入特征乘以连线上的 θ \theta θ值,也就是之前所说的模型参数,有时也称它为权重,得到的结果再通过Sigmoid函数处理即得最后的结果。通常,我们会在输入特征 x 1 , x 2 , x 3 x_{1},x_{2},x_{3} x1,x2,x3之外添加一个 x 0 x_{0} x0作为偏置项(bias unit)并恒置为1,作用和之前学习中添加 x 0 x_{0} x0的作用一样。
吴恩达机器学习笔记---神经网络前向传播_第5张图片
  我们选用的非线性的激活函数时Sigmoid函数,在吴恩达机器学习中也一直选用它作为激活函数,其实除了它,我们还可以选用其他的激活函数,例如tanh,ReLu函数等等。
  在此基础之上,我们将神经元组合起来,形成真正意义上的神经网络模型,如图:
吴恩达机器学习笔记---神经网络前向传播_第6张图片
  从图中可以直观地看到,我们有三个特征 x 1 x_1 x1, x 2 x_2 x2, x 3 x_3 x3是输入单元(input units),我们将原始数据输入给它们。 a 1 a_1 a1, a 2 a_2 a2, a 3 a_3 a3是中间单元,它们负责将数据进行处理,然后呈递到下一层。 最后是输出单元,它负责计算 h θ ( x ) {h_\theta}\left( x \right) hθ(x)。我们在第一层和第二层都添加了偏置项。
  我们了解一些术语,神经网络的第一层,也就是输入原始数据的这一层,我们称之为输入层(Input layer);最后一层,也就是输出结果的这一层,我们称之为输出层(Output layer);中间的我称之为隐藏层(Hidden layer),因为我们是看不到中间的计算结果的。通常我们不把输入层计入神经网络的层数当中。
  我们引入一些标记法来帮助描述模型: a i ( j ) a_{i}^{\left( j \right)} ai(j) 代表第 j j j 层的第 i i i 个激活单元。 θ ( j ) {{\theta }^{\left( j \right)}} θ(j)代表从第 j j j 层映射到第 j + 1 j+1 j+1 层时的权重的矩阵,例如 θ ( 1 ) {{\theta }^{\left( 1 \right)}} θ(1)代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第 j + 1 j+1 j+1层的激活单元数量为行数,以第 j j j 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中 θ ( 1 ) {{\theta }^{\left( 1 \right)}} θ(1)的尺寸为 3*4。

  黄色圆圈的计算可以用下图表示:
吴恩达机器学习笔记---神经网络前向传播_第7张图片
  即:
   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}}) a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)
   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}}) a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
   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}}) a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
   h Θ ( x ) = g ( Θ 10 ( 2 ) a 0 ( 2 ) + Θ 11 ( 2 ) a 1 ( 2 ) + Θ 12 ( 2 ) a 2 ( 2 ) + Θ 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}^{(2)}+\Theta {13}^{(2)}a{3}^{(2)}) hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))

  计算过程就是我们说的,将输入乘以连线上的模型参数 θ \theta θ的值,再经过激活函数Sigmoid的运算就得到输出,每个神经元的计算过程都是这样的。

(三)向量化(Vectorization)

  我们将计算过程copy过来:

   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}}) a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)
   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}}) a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
   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}}) a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
   h Θ ( x ) = g ( Θ 10 ( 2 ) a 0 ( 2 ) + Θ 11 ( 2 ) a 1 ( 2 ) + Θ 12 ( 2 ) a 2 ( 2 ) + Θ 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}^{(2)}+\Theta {13}^{(2)}a{3}^{(2)}) hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))

  我们一步一步地实现向量化的过程。
  首先,我们令 a ( 2 ) = g ( z ( 2 ) ) {{a}^{\left( 2 \right)}}=g({{z}^{\left( 2 \right)}}) a(2)=g(z(2)),即将激活函数中的内容用 z ( 2 ) {{z}^{\left( 2 \right)}} z(2)代替,也就是将括号里的内容分别用 z 1 ( 2 ) , z 2 ( 2 ) , z 3 ( 2 ) z_{1}^{(2)},z_{2}^{(2)},z_{3}^{(2)} z1(2)z2(2)z3(2)表示,具体如图所示:
吴恩达机器学习笔记---神经网络前向传播_第8张图片
  由此我们得到了第一步向量化的结果:
吴恩达机器学习笔记---神经网络前向传播_第9张图片
在这里插入图片描述

  我们令 z ( 2 ) = θ ( 1 ) x {{z}^{\left( 2 \right)}}={{\theta }^{\left( 1 \right)}}x z(2)=θ(1)x,则 a ( 2 ) = g ( z ( 2 ) ) {{a}^{\left( 2 \right)}}=g({{z}^{\left( 2 \right)}}) a(2)=g(z(2)) ,计算后添加 a 0 ( 2 ) = 1 a_{0}^{\left( 2 \right)}=1 a0(2)=1。 计算输出的值为:
在这里插入图片描述
  总的过程可以表示如下:
吴恩达机器学习笔记---神经网络前向传播_第10张图片

你可能感兴趣的:(机器学习,人工智能,神经网络,机器学习)