美文网首页
神经网络和深度学习 - Chapter2 神经网络基础

神经网络和深度学习 - Chapter2 神经网络基础

作者: nlpming | 来源:发表于2021-09-12 20:01 被阅读0次

    Binary Classification

    • 图像分类任务,一张图片由三个通道表示红绿蓝假设每个通道的维度为64x64,则总共的输入维度为:64 \times 64 \times 3,则输入向量维度n_x = 12288
    图像分类问题.png

    符号定义

    • 假设总共有m个训练样本:\left\{ (x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}),...,(x^{(m)}, y^{(m)}) \right\};最终X \in \mathbb{R}^{(n_x, m)}Y \in \mathbb{R}^{(1, m)}的计算公式如下:
    符号定义.png

    Logistic Regression定义

    • 逻辑回归数学表达式为:\hat{y} = \sigma (w^Tx + b) = \sigma (\theta^Tx),其中\sigma为sigmoid激活函数。sigmoid激活函数数学表达式为:\sigma(z) = \frac{1}{1+e^{-z}}
    Logistic Regression定义.png

    Logistic Regression损失函数

    • 对于逻辑回归,可以采用平方误差损失函数;但是这样会导致变成一个非凸的优化问题。使得梯度下降算法可能会找到一个局部最优值。
    • 所以对于逻辑回归常采用交叉熵损失函数,这样使得问题变成了一个凸优化问题,使得梯度下降算法能够找到一个全局最优值;单个样本的损失函数定义如下:
      L(\hat{y}^{(i)}, y^{(i)}) = - \left[ y^{(i)}log(\hat{y}^{(i)}) + (1-y^{(i)}) log(1- \hat{y}^{(i)}) \right]
    • 整个样本的损失函数定义如下:
      J(w,b) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)}log(\hat{y}^{(i)}) + (1-y^{(i)}) log(1- \hat{y}^{(i)}) \right]
      逻辑回归损失函数.png

    梯度下降法

    • 梯度下降法的目标:找到w,b使得损失函数J(w,b)达到最小值;
    • 通过随机初始化的方式获取w,b的初始值,然后使用梯度下降法不断的更新参数w,b;下式中\alpha表示学习率,即更新步长;
      w := w - \alpha \frac{\partial J(w,b)}{\partial w} \\ b := b - \alpha \frac{\partial J(w,b)}{\partial b}
    image.png
    image.png

    前向传播&反向传播算法

    • 前向计算得到J的过程:u = b*c -> v = a+u -> J=3v; 先计算得到u,再计算得到v,然后最终得到J的值。

      前向传播.png
    • 反向传播过程: 首先计算\frac{dJ}{dv} = 3,然后计算\frac{dJ}{da} = \frac{dJ}{dv} \frac{dv}{da} = 3*1 = 3\frac{dJ}{du} = \frac{dJ}{dv} \frac{dv}{du} = 3*1 = 3

    • 之后计算\frac{dJ}{db} = \frac{dJ}{du} \frac{du}{db} = 3*2 = 6\frac{dJ}{dc} = \frac{dJ}{du} \frac{du}{dc} = 3*3=9从上面的计算过程可以看出,在计算J对各个参数的偏导数的时候是一个从右到左的过程,即是一个反向传播的过程;前面参数偏导数的计算,依赖后面参数偏导数计算的结果;通过这种方式能够加速梯度下降过程,这也是反向传播算法的精髓所在。

    反向传播.png

    Logistic Regression 前向&反向传播

    • 假设输入的特征向量为X = [x_1, x_2],则整个逻辑回归的参数共有三个w_1, w_2, b
    • 损失函数J(a,y)a的偏导数如下:
      L(a,y) = - \left[ ylog(a) + (1-y)log(1-a) \right] \\ \frac{\partial L(a,y)}{\partial a} = - \frac{y}{a} + \frac{1-y}{1-a}
    • 其中sigmoid的函数\sigma(z)z的导数为:\frac{d\sigma(z)}{dz} = \sigma(z)(1-\sigma(z))
    image.png
    • 对于单个样本而言,最终三个参数w_1,w_2,b的更新公式如下,其中dz = a - y
      w_1 := w_1 - \alpha * x_1 * dz \\ w_2 := w_2 - \alpha * x_2 * dz \\ b := b - \alpha * dz

      单个样本.png
    • 对于m个样本,参数的更新公式如下:

      m个样本参数更新公式.png
    • 对于m个样本,Logistic Regression前向和反向传播过程;此时需要循环遍历m个样本,并且需要循环遍历所有参数;

      logistic regression前向&反向传播过程.png

    向量化

    • 简单的向量化举例,可以发现通过向量化的方式能够加速运算;


      向量化举例.png

    (1)向量化前向传播过程

    • 计算公式如下:Z = np.dot(w^T, X) + bA = sigmoid(Z)
    向量化前向传播过程.png

    (2)向量化反向传播过程

    • 反向传播dz, db, dw更新公式如下:
      dz = A - Y
      db = \frac{1}{m} np.sum(dz)
      dw = \frac{1}{m} X^T dz
    向量化反向传播过程.png
    • 最后一个循环,迭代次数不可避免;损失函数向量化表示如下:
      J = - \frac{1}{m} np.sum(Y*log(A) + (1 - Y)*log(1-A))
    LR向量化更新公式.png

    Python中的广播

    • 对于一个(m, n)的矩阵和一个(1,n)或者(m,1)的矩阵做加、减、乘、除都会将第二个矩阵做广播;
      Python中的广播举例.png

    相关文章

      网友评论

          本文标题:神经网络和深度学习 - Chapter2 神经网络基础

          本文链接:https://www.haomeiwen.com/subject/ivrtgltx.html