乐趣区

关于深度学习:深度学习教程-神经网络基础

  • 作者:韩信子 @ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/35
  • 本文地址:http://www.showmeai.tech/article-detail/213
  • 申明:版权所有,转载请分割平台与作者并注明出处

珍藏 ShowMeAI 查看更多精彩内容


本系列为吴恩达老师《深度学习专项课程 (Deep Learning Specialization)》学习与总结整顿所得,对应的课程视频能够在 这里 查看。

引言

在 ShowMeAI 前一篇文章 深度学习概论 中咱们对深度学习(Deep Learning) 进行了简略介绍:

  • 咱们以房价预测为例,对应解说了神经网络 (Neural Network) 模型构造和基础知识。
  • 介绍了针对监督学习的几类典型神经网络:Standard NN,CNN 和 RNN。
  • 介绍了「结构化数据」和「非结构化数据」2 种不同类型的数据。
  • 剖析了近些年来深度学习热门,及其性能优于传统机器学习的起因(Data,Computation 和 Algorithms)。

本节内容咱们开展介绍神经网络的根底:逻辑回归 (Logistic Regression)。咱们将通过对逻辑回归模型构造的剖析,过渡到后续神经网络模型。(对于逻辑回归模型,大家也能够浏览 ShowMeAI 的文章 图解机器学习 | 逻辑回归算法详解 学习)

1. 算法根底与逻辑回归

逻辑回归(Logistic regression) 是一个用于二分类的算法。

1.1 二分类问题与机器学习根底

二分类就是输入 \(y\)只有 {0,1} 两个离散值 (也有 {-1,1} 的状况)。咱们以一个「 图像识别 」问题为例,判断图片是否是猫。辨认是否是「猫」,这是一个典型的二分类问题——0 代表「非猫(not cat)」,1 代表「猫(cat)」。(对于机器学习基础知识大家也能够查看 ShowMeAI 文章 图解机器学习 | 机器学习基础知识)。

从机器学习的角度看,咱们的输出 \(x\)此时是一张图片,彩色图片蕴含 RGB 三个通道,图片尺寸为 \((64,64,3)\)。

有些神经网络的输出是一维的,咱们能够将图片 \(x\)(维度 \((64,64,3)\))展平为一维特征向量(feature vector),失去的特征向量维度为 \((12288,1)\)。咱们个别用列向量示意样本,把维度记为 \(n_x\)。

如果训练样本有 \(m\)张图片,那么咱们用矩阵存储数据,此时数据维度变为 \((n_x,m)\)。

  • 矩阵 \(X\)的行 \(n_x\)代表了每个样本 \(x^{(i)}\)特色个数
  • 矩阵 \(X\)的列 \(m\)代表了样本个数。

咱们能够对训练样本的标签 \(Y\)也做一个规整化,调整为 1 维的状态,标签 \(Y\)的维度为 \((1,m)\)。

1.2 逻辑回归算法

逻辑回归是最常见的二分类算法 (具体算法解说也可浏览 ShowMeAI 文章 图解机器学习 | 逻辑回归算法详解),它蕴含以下参数:

  • 输出的特征向量:\(x \in R^{n_x}\),其中 \({n_x}\)是特色数量
  • 用于训练的标签:\(y \in 0,1\)
  • 权重:\(w \in R^{n_x}\)
  • 偏置:\(b \in R\)
  • 输入:\(\hat{y} = \sigma(w^Tx+b)\)

输入计算用到了 Sigmoid 函数,它是一种非线性的 S 型函数,输入被限定在 \([0,1]\) 之间,通常被用在神经网络中当作激活函数 (Activation Function) 应用。

Sigmoid 函数的表达式如下:

$
s = \sigma(w^Tx+b) = \sigma(z) = \frac{1}{1+e^{-z}}
$

实际上,逻辑回归能够看作十分小的一个神经网络。

1.3 逻辑回归的损失函数

在机器学习中,损失函数 (loss function) 用于量化掂量预测后果与实在值之间的差距,咱们会通过优化损失函数来一直调整模型权重,使其最好地拟合样本数据。

在回归类问题中,咱们会应用均方差损失(MSE):

$$
L(\hat{y},y) = \frac{1}{2}(\hat{y}-y)^2
$$

然而在逻辑回归中,咱们并不偏向于应用这样的损失函数。逻辑回归应用平方差损失会失去非凸的损失函数,它会有很多个部分最优解。梯度降落法可能找不到全局最优值,从而给优化带来艰难。

因而咱们调整成应用对数损失(二元穿插熵损失):

$$
L(\hat{y},y) = -(y\log\hat{y})+(1-y)\log(1-\hat{y})
$$

方才咱们给到的是单个训练样本中定义的损失函数,它掂量了在单个训练样本上的体现。咱们定义 代价函数 (Cost Function,或者称作老本函数) 为整体训练样本上的体现,即 \(m\)个样本的损失函数的平均值,反映了 \(m\)个样本的预测输入与实在样本输入 \(y\)的均匀靠近水平。

老本函数的计算公式如下:

$$
J(w,b) = \frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})
$$

2. 梯度降落法(Gradient Descent)

方才咱们理解了损失函数 (Loss Function) 与老本函数定义,下一步咱们就要找到最优的 \(w\)和 \(b\)值,最小化 \(m\)个训练样本的 Cost Function。这里用到的办法就叫做 梯度降落 (Gradient Descent) 算法。

在数学上,1 个函数的梯度 (gradient) 指出了它的最陡增长方向。也就是说,沿着梯度的方向走,函数增长得就最快。那么沿着梯度的负方向走,函数值就降落得最快。

(更具体的最优化数学知识能够浏览 ShowMeAI 文章 图解 AI 数学根底 | 微积分与最优化

模型的训练指标是寻找适合的 \(w\)与 \(b\)以最小化代价函数值。咱们先假如 \(w\)与 \(b\)都是一维实数,则代价函数 \(J\)对于 \(w\)与 \(b\)的图如下所示:

上图中的代价函数 \(J\)是一个 凸函数,只有一个全局最低点,它能保障无论咱们初始化模型参数如何(在曲面上任何地位),都可能寻找到适合的最优解。

基于梯度降落算法,失去以下参数 \(w\)的更新公式:

$$
w := w – \alpha\frac{dJ(w, b)}{dw}
$$

公式中 \(\alpha\)为学习率,即每次更新的 \(w\)的步长。

老本函数 \(J(w, b)\)中对应的参数 \(b\)更新公式为:

$$
b := b – \alpha\frac{dJ(w, b)}{db}
$$

3. 计算图(Computation Graph)

对于神经网络而言,训练过程蕴含了两个阶段:前向流传 (Forward Propagation) 和反向流传(Back Propagation)。

  • 前向流传是从输出到输入,由神经网络前推计算失去预测输入的过程
  • 反向流传是从输入到输出,基于 Cost Function 对参数 \(w\)和 \(b\)计算梯度的过程。

上面,咱们联合一个例子用计算图 (Computation graph) 的模式来了解这两个阶段。

3.1 前向流传(Forward Propagation)

如果咱们的 Cost Function 为 \(J(a,b,c)=3(a+bc)\),蕴含 \(a\)、\(b\)、\(c\)三个变量。

咱们增加一些两头变量,用 \(u\)示意 \(bc\),\(v\)示意 \(a+u\),则 \(J=3v\)。

整个过程能够用计算图示意:

在上图中,咱们让 \(a=5\),\(b=3\),\(c=2\),则 \(u=bc=6\),\(v=a+u=11\),\(J=3v=33\)。

计算图中,这种从左到右,从输出到输入的过程,就对应着神经网络基于 \(x\)和 \(w\)计算失去 Cost Function 的前向计算过程。

3.2 反向流传(Back Propagation)

咱们接着上个例子中的计算图解说反向流传,咱们的输出参数有 \(a\)、\(b\)、\(c\)三个。

先计算 \(J\)对参数 \(a\)的偏导数

从计算图上来看,从右到左,\(J\)是 \(v\)的函数,\(v\)是 \(a\)的函数。基于求导链式法则失去:

$$
\frac{\partial J}{\partial a}=\frac{\partial J}{\partial v}\cdot \frac{\partial v}{\partial a}=3\cdot 1=3
$$

计算 \(J\)对参数 \(b\)的偏导数

从计算图上来看,从右到左,\(J\)是 \(v\)的函数,\(v\)是 \(u\)的函数,\(u\)是 \(b\)的函数。同样可得:

$$
\frac{\partial J}{\partial b}=\frac{\partial J}{\partial v}\cdot \frac{\partial v}{\partial u}\cdot \frac{\partial u}{\partial b}=3\cdot 1\cdot c=3\cdot 1\cdot 2=6
$$

计算 \(J\)对参数 \(c\)的偏导数

此时从右到左,\(J\)是 \(v\)的函数,\(v\)是 \(u\)的函数,\(u\)是 \(c\)的函数。可得:

$$
\frac{\partial J}{\partial c}=\frac{\partial J}{\partial v}\cdot \frac{\partial v}{\partial u}\cdot \frac{\partial u}{\partial c}=3\cdot 1\cdot b=3\cdot 1\cdot 3=9
$$

这样就实现了从右往左的反向流传与梯度 (偏导) 计算过程。

4. 逻辑回归中的梯度降落法

回到咱们后面提到的逻辑回归问题,咱们假如输出的特征向量维度为 2(即 \([x_1, x_2]\)),对应权重参数 \(w_1\)、\(w_2\)、\(b\)失去如下的计算图:

反向流传计算梯度

求出 \(L\)对于 \(a\)的导数

求出 \(L\)对于 \(z\)的导数

持续前推计算

基于梯度降落能够失去参数更新公式

后面提到的是对单个样本求偏导和利用梯度降落算法的过程。对于有 \(m\)个样本的数据集,Cost Function \(J(w,b)\)、\(a^{(i)}\) 和 权重参数 \(w_1\) 的计算如图所示。

残缺的 Logistic 回归中某次训练的流程如下,这里仅假如特征向量的维度为 2:

J=0; dw1=0; dw2=0; db=0;
for i = 1 to m
    z(i) = wx(i)+b;
    a(i) = sigmoid(z(i));
    J += -[y(i)log(a(i))+(1-y(i))log(1-a(i));
    dz(i) = a(i)-y(i);
    dw1 += x1(i)dz(i);
    dw2 += x2(i)dz(i);
    db += dz(i);
J /= m;
dw1 /= m;
dw2 /= m;
db /= m;

接着再对 \(w_1\)、\(w_2\)、\(b\)进行迭代。

上述计算过程有一个毛病:整个流程蕴含两个 for 循环。其中:

  • 第一个 for 循环遍历 \(m\)个样本
  • 第二个 for 循环遍历所有特色

如果有大量特色,在代码中显示应用 for 循环会使算法很低效。向量化 能够用于解决显式应用 for 循环的问题。

5. 向量化(Vectorization)

持续以逻辑回归为例,如果以非向量化的循环形式计算 \(z=w^Tx+b\),代码如下:

z = 0;
for i in range(n_x):
    z += w[i] * x[i]
z += b

基于向量化的操作,能够并行计算,极大晋升效率,同时代码也更为简洁:
(这里应用到 python 中的 numpy 工具库,想理解更多的同学能够查看 ShowMeAI 的 图解数据分析 系列中的 numpy 教程,也能够通过 ShowMeAI 制作的 numpy 速查手册 疾速理解其应用办法)

z = np.dot(w, x) + b

不必显式 for 循环,实现逻辑回归的梯度降落的迭代伪代码如下:

$$Z=w^TX+b=np.dot(w.T, x) + b$$

$$A=\sigma(Z)$$

$$dZ=A-Y$$

$$dw=\frac{1}{m}XdZ^T$$

$$db=\frac{1}{m}np.sum(dZ)$$

$$w:=w-\sigma dw$$

$$b:=b-\sigma db$$

参考资料

  • 图解机器学习 | 逻辑回归算法详解
  • 图解机器学习 | 机器学习基础知识)
  • 图解 AI 数学根底 | 微积分与最优化)
  • 图解数据分析
  • numpy 速查手册

ShowMeAI 系列教程举荐

  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读

举荐文章

  • 深度学习教程 | 深度学习概论
  • 深度学习教程 | 神经网络根底
  • 深度学习教程 | 浅层神经网络
  • 深度学习教程 | 深层神经网络
  • 深度学习教程 | 深度学习的实用层面
  • 深度学习教程 | 神经网络优化算法
  • 深度学习教程 | 网络优化:超参数调优、正则化、批归一化和程序框架
  • 深度学习教程 | AI 利用实际策略(上)
  • 深度学习教程 | AI 利用实际策略(下)
  • 深度学习教程 | 卷积神经网络解读
  • 深度学习教程 | 经典 CNN 网络实例详解
  • 深度学习教程 | CNN 利用:指标检测
  • 深度学习教程 | CNN 利用:人脸识别和神经格调转换
  • 深度学习教程 | 序列模型与 RNN 网络
  • 深度学习教程 | 自然语言解决与词嵌入
  • 深度学习教程 | Seq2seq 序列模型和注意力机制

\

退出移动版