【神经网络】Week1 神经网络基础

1.0 二分类 Binary Classification

在二分类问题中,结果是一个离散的值。
比如输入一张图片,判断图片中有猫(1) OR 没有猫(0):


binary classification

这里的X为特征向量,共有12288维。

python trick—-对图片x做归一化, x = \frac{x}{||x||}:
x = \begin{bmatrix}0 & 3 & 4 \\ 2 & 6 & 4\end{bmatrix}
这里的||x||在numpy里:np.linalg.norm(x, axis=1, keepdims=True),
||x|| = \begin{bmatrix} 5. \\ \sqrt{56}\end{bmatrix}

2.0 logistic回归

给定x\hat y = P(y=1|x),这里0< \hat y<1.
在logistic回归中的参数包括:

  • x\in R^{n_x}
  • y \in \{0, 1\}
  • w \in R^{n_x}
  • b \in R
  • \hat y = \sigma(w^Tx + b)= \frac{1}{1+ e^{-z}}, 这里z = w^Tx + b

    sigmoid

    可见,如果z很大,\hat y \approx 1,
    反之,如果z很小,\hat y \approx 0

3.0 logistic回归的损失函数

为了求得最优的w, b,我们需要定义损失函数。
对于第i个训练样本x^{(i)},它的预测值为
\hat y^{(i)} = \sigma(w^Tx^{(i) + b}), \text{where } \sigma(z^{(i)})= \frac{1}{1+e^{-z^{(i)}}}

那么对于一个训练集,若共有m个样本,
\{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), ...,(x^{(m)}, y^{(m)})\}
我们希望:
\hat y^{(i)} \approx y^{(i)}
在NG的课程里,loss function和 cost function虽然都表示损失函数,但是有区别:

  • loss function,衡量某个样本预测值\hat y^{(i)}和真实值y^{(i)}之间的差距,比如常见的MSE,
    L(\hat y^{(i)}, y^{(i)})= \frac{1}{2}(\hat y^{(i)} - y^{(i)})^2
    或者,在分类问题中常用的,
    L(\hat y^{(i)}, y^{(i)})= -y^{(i)}\log \hat y^{(i)} + (1 -y^{(i)})\log (1- \hat y^{(i)})

理解L(\hat y^{(i)}, y^{(i)})= -y^{(i)}\log \hat y^{(i)} + (1 -y^{(i)})\log (1- \hat y^{(i)})
如果 y^{(i)}=1, 此时L(\hat y^{(i)}, y^{(i)})=-y^{(i)}\log \hat y^{(i)}, 我们希望y^{(i)}\to 1,L\to 0
如果y^{(i)}=0, 此时L(\hat y^{(i)}, y^{(i)})=(1 -y^{(i)})\log (1- \hat y^{(i)}),我们希望y^{(i)}\to 0,L\to 0.

  • cost function,是对整个训练集的loss之和求平均,衡量整个训练集预测值和真实值之间的差距,
    J(w, b) = \frac{1}{m} \sum_{i=1}^m L(\hat y^{(i)}, y^{(i)})

4.0 梯度下降法 Gradient Descent

我们已经有
J(w, b) = \frac{1}{m} \sum_{i=1}^m L(\hat y^{(i)}, y^{(i)})= \frac{1}{m} \sum_{i=1}^m [-y^{(i)}\log \hat y^{(i)} + (1 -y^{(i)})\log (1- \hat y^{(i)})]
我们想要找到最佳的\{w,b\}使得J(w, b)最小。


image.png

从总体来说,我们希望找到上图最低点的global optima,具体方法看下图,


image.png

假设与之间存在如图所示的函数关系,那么可以通过

来更新,同理,

为了简略,以后\frac{{\rm d} J(w, b)}{{\rm d}w}都写作{\rm d}w

5.0&6.0 导数&导数例子

7.0&8.0 计算图&计算图的导数计算

简单理解,就是复合函数,链式求导


computation graph

前向后向
u = bc\frac{{\rm d}J}{{\rm d}c} =\frac{{\rm d}J}{{\rm d}u} * \frac{{\rm d}u}{{\rm d}c}=3b
v = a + u\frac{{\rm d}J}{{\rm d}u} = \frac{{\rm d}J}{{\rm d}v} * \frac{{\rm d}v}{{\rm d}u }= 3
J = 3v\frac{{\rm d}J}{{\rm d}v} = 3

9.0 logistic回归中的梯度下降


image.png

首先,回顾一下logistic回归,

设,即

那么,

前向后向简写
z = w_1x_1 + w_2x_2\frac{{\rm d}L}{{\rm d}w_1} =\frac{{\rm d}L}{{\rm d}z} * \frac{{\rm d}z}{{\rm d}w_1} =x_1*(a-y){\rm d}w_1
a = \sigma(z)\frac{{\rm d}L}{{\rm d}z} = \frac{{\rm d}L}{{\rm d}a} * \frac{{\rm d}a}{{\rm d}z} = a-y{\rm d}z
L(a, y) = -y\log a + (1-y)\log (1-a)\frac{{\rm d}L}{{\rm d}a} = -\frac{y}{a} + \frac{1-y}{1-a}{\rm d}a

每次更新,
w_1 := w_1 - \alpha {\rm d}w_1
w_2 := w_2 - \alpha {\rm d}w_2
b := b - \alpha {\rm d}b

\frac{{\rm d}L}{{\rm d}z}= \frac{{\rm d}L}{{\rm d}a} * \frac{{\rm d}a}{{\rm d}z} = a-y的求解过程:
已求的\frac{{\rm d}L}{{\rm d}a} = -\frac{y}{a} + \frac{1-y}{1-a},那么\frac{{\rm d}a}{{\rm d}z}=?
已知 a = \sigma(z) = \frac{1}{1+e^{-z}},那么
\begin{align} \frac{{\rm d}a}{{\rm d}z} &=(-1)* (1+e^{-z})^{-2}*(e^{-z})*(-1)\\ &=\frac{e^{-z}}{(1+e^{-z})^2}\\ &=\frac{1+e^{-z}-1}{(1+e^{-z})^2}\\ &=\frac{1+e^{-z}}{(1+e^{-z})^2}-\frac{1}{(1+e^{-z})^2}\\ &= \frac{1}{1+e^{-z}}-\frac{1}{(1+e^{-z})^2}\\ &= a-a^2\\ &=a(1-a)\end{align}
所以,
\begin{align} \frac{{\rm d}L}{{\rm d}z}&= \frac{{\rm d}L}{{\rm d}a} * \frac{{\rm d}a}{{\rm d}z}\\ &=(-\frac{y}{a} + \frac{1-y}{1-a})*[a(1-a)]\\ &=-y(1-a) + [a(1-y)\\ &=-y + ay + a- ay\\ &=a-y \end{align}

10.0 logistic regression on m examples

我们知道对某一个样本,有
L(\hat y^{(i)}, y^{(i)})= -y^{(i)}\log \hat y^{(i)} + (1 -y^{(i)})\log (1- \hat y^{(i)})
其中,
z^{(i)} = w^Tx^{(i)} + b
\hat y^{(i)} =a^{(i)}= \sigma(z^{(i)})

而对整个训练集,
J(w, b) = \frac{1}{m} \sum_{i=1}^m L(\hat y^{(i)}, y^{(i)})

每次更新,
\frac{\partial}{\partial w_1} J(w, b) = \frac{1}{m} \sum_{i=1}^m \underbrace{\frac{\partial}{\partial w_1}L(\hat y^{(i)}, y^{(i)})}_{{\rm d}w_1}

现在开始计算参数w, b
设初始值,J =0;{\rm d}w_1=0; {\rm d}w_2 = 0;{\rm d}b=0,

\begin{array}{cc} \fbox{ For i=0 to m:}\\ z^{(i)} = w^Tx^{(i)} + b \\ a^{(i)}= \sigma(z^{(i)}) \\ J += -y^{(i)}\log \hat y^{(i)} + (1 -y^{(i)})\log (1- \hat y^{(i)})\\ {\rm d}z^{(i)} = a^{(i)} -y^{(i)}\\ {\rm d}w_1 += x_1^{(i)}{\rm d}z^{(i)}\\ {\rm d}w_2 += x_2^{(i)}{\rm d}z^{(i)}\\ {\rm d}b += {\rm d}z^{(i)}\\ \hline \\ J /= m\\ {\rm d}w_1 /= m\\ {\rm d}w_2 /= m\\ {\rm d}b /= m\\ \end{array}

11.0 向量化 Vectorization

向量化可以优化上述算法,更快,更简约。

举例,已知z =w^T x + b,
x = \begin{bmatrix} x_1 \\ x_2\\ \vdots \\ x^{n_x} \end{bmatrix}, w = \begin{bmatrix} w_1 \\ w_2\\ \vdots \\ w^{n_x} \end{bmatrix}
\begin{array}{cc} \mathrm{Non-vectorized} & \mathrm{Vectorized} \\ \hline \\ z = 0& Z = \text{np.dot(w, x) + b} \\ \text{for i in range(n_x):} & \\ z +=w[i]*x[i] &\\ \end{array}

12.0 logistic回归的向量化

TIP:尽可能避免显式的for循环。

\begin{array}{c|c} {\rm Original}&{\rm Vectorization}\\ \hline J =0;{\rm d}w_1=0; {\rm d}w_2 = 0;{\rm d}b=0 &J =0;{\rm d}w={\rm np.zeros((n_x, 1))};{\rm d}b=0 \\ \hline \fbox{ For i=0 to m:} & \fbox{ For i=0 to m:}\\ z^{(i)} = w^Tx^{(i)} + b&z^{(i)} = w^Tx^{(i)} + b \\ a^{(i)}= \sigma(z^{(i)}) &a^{(i)}= \sigma(z^{(i)})\\ J += -y^{(i)}\log \hat y^{(i)} + (1 -y^{(i)})\log (1- \hat y^{(i)}) & J += -y^{(i)}\log \hat y^{(i)} + (1 -y^{(i)})\log (1- \hat y^{(i)}) \\ {\rm d}z^{(i)} = a^{(i)} -y^{(i)}\\ {\rm d}w_1 += x_1^{(i)}{\rm d}z^{(i)}& {\rm d}w += x^{(i)} {\rm d}z^{(i)}\\ {\rm d}w_2 += x_2^{(i)}{\rm d}z^{(i)}\\ {\rm d}b += {\rm d}z^{(i)}\\ \hline J /= m&J /= m\\ {\rm d}w_1 /= m &{\rm d}w /= m\\ {\rm d}w_2 /= m\\ {\rm d}b /= m&{\rm d}b /= m\\ \end{array}

13.0 m个样本的向量化

12.0只是对一个样本进行向量化,那么对训练集的m个样本可以进行向量化吗?

样本1样本2样本m
z^{(1)} = w^T x^{(1)} +bz^{(2)} = w^T x^{(2)} +bz^{(m)} = w^T x^{(m)} +b
a^{(1)} = \sigma(z^{(1)})a^{(2)} = \sigma(z^{(2)})a^{(m)} = \sigma(z^{(m)})

可见,设X,是所有样本的向量化,且X\in R^{n_x\times m}

X = \underbrace{\begin{bmatrix} |&|&...&|\\ x^{(1)}&x^{(2)} &...&x^{(m)}\\ |&|&...&|\\\end{bmatrix}}_{m}

已经Z的向量化为,
\begin{align} Z &= \begin{bmatrix} z^{(1)}&z^{(2)} &...&z^{(m)}\end{bmatrix}\\ &=\begin{bmatrix} w^T x^{(1)} +b&w^T x^{(2)} +b &...&w^T x^{(m)} +b\end{bmatrix}\\ &=w^TX + b \end{align}
所以,

Z = np.dot(w.T, X) + b

同理,A的向量化,
A = \begin{bmatrix} a^{(1)}&a^{(2)} &...&a^{(m)}\end{bmatrix} = \sigma(Z)

14.0 m个样本的向量化后的梯度计算

A = \begin{bmatrix} a^{(1)}&a^{(2)} &...&a^{(m)}\end{bmatrix}, Y = \begin{bmatrix} y^{(1)}&y^{(2)} &...&y^{(m)}\end{bmatrix}.

这时,再与初始的,包含多个for循环的算法对比:

\begin{array}{c|c} {\rm Original}&{\rm Vectorization}\\ \hline J =0;{\rm d}w_1=0; {\rm d}w_2 = 0;{\rm d}b=0&\fbox{ For iter in range(1000):} \\ \hline \fbox{ For i=0 to m:}&Z = {\rm np.dot}(w.T,X)+b\\ z^{(i)} = w^Tx^{(i)} + b&A = \sigma (Z) \\ a^{(i)}= \sigma(z^{(i)}) & {\rm d}Z = A - Y\\ J += -y^{(i)}\log \hat y^{(i)} + (1 -y^{(i)})\log (1- \hat y^{(i)}) &{\rm d}w = \frac{1}{m}X({\rm d}Z)^T\\ {\rm d}z^{(i)} = a^{(i)} -y^{(i)}&{\rm d}b = \frac{1}{m}{\rm np.sum({\rm d}Z)}\\ {\rm d}w_1 += x_1^{(i)}{\rm d}z^{(i)}&w:=w - \alpha{\rm d}w\\ {\rm d}w_2 += x_2^{(i)}{\rm d}z^{(i)}&b:=b - \alpha{\rm d}b\\ {\rm d}b += {\rm d}z^{(i)}\\ \hline J /= m\\ {\rm d}w_1 /= m \\ {\rm d}w_2 /= m\\ {\rm d}b /= m\\ \end{array}

https://www.jianshu.com/p/d3bc16ac74b2

Python量化投资网携手4326手游为资深游戏玩家推荐:《《魂器学院》新手入学指南丨常见游戏问题解答

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论