Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 22 additions & 29 deletions lectures/back_prop.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ kernelspec:

## 概述

**机器学习**和**人工智能**的主要部分包括
**机器学习**和**人工智能**的重要部分包括

* 用已知函数来近似未知函数
* 从左右变量的数据集中估计已知函数
* 从一组输入-输出数据中估计这个已知函数

本讲座描述了一种广泛用于近似函数$f$的普通**人工神经网络**(ANN)的结构该函数将空间$X$中的$x$映射到空间$Y$中的$y$。
本讲座描述了一种广泛用于近似函数$f$的普通**人工神经网络**(ANN)的结构该函数将空间 $X$ 中的 $x$ 映射到空间 $Y$ 中的 $y$。

为了介绍基本概念,我们研究一个$x$和$y$都是标量的例子。

Expand All @@ -43,15 +43,15 @@ kernelspec:

## 一个深度(但不宽)的人工神经网络

我们描述一个"深度"神经网络,其"宽度"为一。
我们描述一个"深度"神经网络其"宽度"为一。

**深度**意味着网络由组织成图形节点的大量函数组成
**深度**指网络由大量函数复合而成,这些函数被组织在图的节点上

**宽度**指的是被近似函数右侧的变量数量。

将"宽度"设为一意味着网络仅组合单变量函数
宽度为一意味着网络仅复合单变量函数

设$x \in \mathbb{R}$为一个标量,$y \in \mathbb{R}$为另一个标量。
$x \in \mathbb{R}$ 为一个标量$y \in \mathbb{R}$ 为另一个标量。

我们假设$y$是$x$的一个非线性函数:

Expand All @@ -61,9 +61,9 @@ $$

我们想用另一个递归定义的函数来近似$f(x)$。

对于深度为$N \geq 1$的网络,每个**层**$i =1, \ldots N$包含
对于深度为 $N \geq 1$ 的网络,每**层** $i =1, \ldots N$ 包含

* 一个输入$x_i$
* 一个输入 $x_i$
* 一个**仿射函数** $w_i x_i + bI$,其中 $w_i$ 是施加在输入 $x_i$ 上的标量**权重**,$b_i$ 是标量**偏置**

* 一个**激活函数** $h_i$,它以 $(w_i x_i + b_i)$ 为参数并产生输出 $x_{i+1}$
Expand All @@ -89,7 +89,7 @@ $$
h(z) = z
$$

作为下面的激活函数,我们将对第1层到第N-1层使用sigmoid函数,对第N层使用恒等函数
作为下面的激活函数,我们将对第 $1$ 层到第 $N-1$ 层使用sigmoid函数,对第 $N$ 层使用恒等函数

为了近似函数 $f(x)$,我们按如下方式构造 $\hat f(x)$。

Expand All @@ -99,7 +99,7 @@ $$
l_{i}\left(x\right)=w_{i}x+b_{i} .
$$

我们通过迭代函数组合 $h_i \circ l_i$ 来构造 $\hat f$:
我们通过迭代组合函数 $h_i \circ l_i$ 来构造 $\hat f$:

$$
f(x)\approx\hat{f}(x)=h_{N}\circ l_{N}\circ h_{N-1}\circ l_{1}\circ\cdots\circ h_{1}\circ l_{1}(x)
Expand All @@ -112,7 +112,7 @@ $N$ 这个整数越大,神经网络就越"深"。
显然,如果我们知道参数 $\{w_i, b_i\}_{i=1}^N$,那么对于给定的 $x = \tilde x$,我们可以通过迭代以下递归来计算 $\hat f(x)$:

$$
x_{i+1} = h_i \circ l_i(x_i) , \quad, i = 1, \ldots N
x_{i+1} = h_i \circ l_i(x_i) , \quad i = 1, \ldots N
$$ (eq:recursion)

从 $x_1 = \tilde x$ 开始。
Expand All @@ -125,8 +125,7 @@ $$ (eq:recursion)

设 $\left\{ \left(w_{i},b_{i}\right)\right\} _{i=1}^{N}$ 表示权重和偏置的序列。

如上所述,对于给定的输入 $x_{1}$,我们的近似函数 $\hat f$ 求值
在 $x_1$ 等于我们网络的"输出" $x_{N+1}$ 时,可以通过迭代 $x_{i+1}=h_{i}\left(w_{i}x_{i}+b_{i}\right)$ 来计算。
如上所述,对于给定的输入 $x_{1}$,我们的近似函数 $\hat f$ 在 $x_1$ 的值等于我们网络的"输出" $x_{N+1}$,其中 $x_{N+1}$ 是通过迭代 $x_{i+1}=h_{i}\left(w_{i}x_{i}+b_{i}\right)$ 来计算。

对于给定的**预测值** $\hat{y} (x)$ 和**目标值** $y= f(x)$,考虑损失函数

Expand All @@ -142,7 +141,7 @@ $$
\min_{\left\{ \left(w_{i},b_{i}\right)\right\} _{i=1}^{N}} \int {\mathcal L}\left(x_{N+1},y\right)(x) d \mu(x)
$$

其中 $\mu(x)$ 是某个测度,用于衡量我们希望得到 $f(x)$ 的良好近似 $\hat f(x)$ 的点 $x \in \mathbb{R}$。
其中 $\mu(x)$ 是某个测度,用来衡量哪些点 $x \in \mathbb{R}$ 需要被良好逼近

将权重和偏置堆叠成参数向量 $p$:

Expand All @@ -157,15 +156,16 @@ p = \begin{bmatrix}
b_N
\end{bmatrix}
$$
对**随机梯度下降**算法的一个"简化版本"应用于寻找函数的零点,得到以下参数更新规则:

一个**随机梯度下降**算法的"简化版本"应用于寻找函数的零点,得到以下参数更新规则:

$$
p_{k+1}=p_k-\alpha\frac{d \mathcal{L}}{dx_{N+1}}\frac{dx_{N+1}}{dp_k}
$$ (eq:sgd)

其中 $\frac{d {\mathcal L}}{dx_{N+1}}=-\left(x_{N+1}-y\right)$ 且 $\alpha > 0$ 是步长。

(参见[这里](https://en.wikipedia.org/wiki/Gradient_descent#Description)和[这里](https://en.wikipedia.org/wiki/Newton%27s_method)以了解随机梯度下降与牛顿法的关系。)
(参见[这里](https://baike.baidu.com/item/%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E6%B3%95/8641233)和[这里](https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95/10887580)以了解随机梯度下降与牛顿法的关系。)

要实现这个参数更新规则的一个步骤,我们需要导数向量 $\frac{dx_{N+1}}{dp_k}$。

Expand All @@ -176,18 +176,13 @@ $$ (eq:sgd)
得益于

* 微分演算中的链式法则和乘积法则的性质,以及

* 下三角矩阵的性质

反向传播实际上可以通过以下两步完成:

* 求下三角矩阵的逆矩阵,以及

* 矩阵乘法

(这个想法来自 MIT 的 Alan Edelman 在这个精彩的 YouTube 视频的最后 7 分钟)

```{youtube} rZS2LGiurKY
```

下面开始。

Expand Down Expand Up @@ -262,7 +257,7 @@ dx_{N+1}/db_{N}
\end{array}\right)=e_{N}\left(I-L\right)^{-1}D.
$$

然后我们可以通过对一组输入-输出对$\left\{ \left(x_{1}^{i},y^{i}\right)\right\} _{i=1}^{M}$(我们称之为"训练集")多次应用我们的$p$更新来解决上述问题。
然后我们可以通过对一组输入-输出对 $\left\{ \left(x_{1}^{i},y^{i}\right)\right\} _{i=1}^{M}$(我们称之为"训练集")多次应用我们的 $p$ 更新来解决上述问题。

## 训练集

Expand Down Expand Up @@ -410,14 +405,12 @@ update_ad(params, x, y)
```
## 示例 1

考虑函数
考虑在区间 $\left[0.5,3\right]$ 上的函数

$$
f\left(x\right)=-3x+2
$$

在区间 $\left[0.5,3\right]$ 上。

我们使用200个点的均匀网格,并对网格上的每个点更新参数300次。

$h_{i}$ 是除最后一层外所有层的sigmoid激活函数,最后一层使用恒等函数,且 $N=3$。
Expand Down Expand Up @@ -472,9 +465,9 @@ Image(fig.to_image(format="png"))

思考上述例子中加深神经网络如何影响近似质量是一件很有趣的事

* 如果网络太深,你会遇到[梯度消失问题](http://neuralnetworksanddeeplearning.com/chap5.html)
* 如果网络太深,你会遇到[梯度消失问题](https://www.zhihu.com/question/645999362/answer/3481844539)
* 在本讲所考虑的情况下,步长和训练轮数等其他参数可能与网络层数一样重要或更重要
* 实际上,由于$f$$x$的线性函数,使用恒等映射作为激活函数的单层网络可能效果最好。
* 实际上,由于 $f$$x$ 的线性函数,使用恒等映射作为激活函数的单层网络可能效果最好。



Expand Down
Loading