deeplearning.ai 重点整理 | 课程一

标题:Neural Networks and Deep Learning

课程一讲述了神经网络方面的基础知识。

什么是神经网络?
神经网络是一种学习算法,受大脑工作方式的启发而产生。

神经网络的计算过程包括前向传播反向传播这两个过程。

一、Logistic Regression 逻辑回归

logistic regression 适用于二分类问题。

输入一张图片,判断图片中是否有猫,就是一个二分类问题。

逻辑回归其实就是一种非常简单的神经网络:
在这里插入图片描述

Hypothesis y ^ = σ ( w T x + b ) \hat{y}=\sigma(w^Tx+b) y^=σ(wTx+b) σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1+e^{-z}} σ(z)=1+ez1

Loss function(针对单个样本点): L ( y ^ , y ) = − y log ⁡ ( y ^ ) − ( 1 − y ) log ⁡ ( 1 − y ^ ) L(\hat{y},y)=-y\log(\hat{y})-(1-y)\log(1-\hat{y}) L(y^,y)=ylog(y^)(1y)log(1y^)

对于 logistic regression,没有使用均方误差作为损失函数的原因是因为,使用均方误差会使得它的代价函数变为非凸函数,不方便寻找全局最小值。

Cost function(针对整个数据集): J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) J(w,b)=\frac{1}{m}\sum^m_{i=1}L(\hat{y}^{(i)},y^{(i)}) J(w,b)=m1i=1mL(y^(i),y(i))

梯度下降公式在这里插入图片描述

计算图

在这里插入图片描述

计算图的思路:

  • 正向计算 J J J 的值
  • 反向求导:从右到左一一对应,分别求 d v = d J d v dv=\frac{dJ}{dv} dv=dvdJ d u = d J d u du=\frac{dJ}{du} du=dudJ d a = d J d a da=\frac{dJ}{da} da=dadJ d b = d J d b db=\frac{dJ}{db} db=dbdJ d c = d J d c dc=\frac{dJ}{dc} dc=dcdJ

用计算图来求导数其实就是用链式法则求导数。后面的小节中,吴用计算图计算了逻辑回归的导数,其实就是用链式法则推导 ∂ J ( w , b ) ∂ w \frac{\partial J(w,b)}{\partial w} wJ(w,b) ∂ J ( w , b ) ∂ b \frac{\partial J(w,b)}{\partial b} bJ(w,b),如下图:
在这里插入图片描述

向量化

使用向量化可以批处理数据,并且向量化后再进行计算比直接使用 for 循环效率高很多。

向量化逻辑回归

X = [ x ( 1 ) x ( 2 ) ⋯ x ( m ) ] n x × m X= \left[\begin{array}{c}x^{(1)} & x^{(2)} & \cdots & x^{(m)}\end{array}\right]_{n_x \times m} X=[x(1)x(2)x(m)]nx×m

z = [ z ( 1 ) z ( 2 ) ⋯ z ( m ) ] = w T X + b = [ w T x ( 1 ) + b w T x ( 2 ) + b ⋯ w T x ( m ) + b ] z = \left[\begin{array}{c}z^{(1)} & z^{(2)} & \cdots & z^{(m)}\end{array}\right] =w^TX+b=\left[\begin{array}{c}w^Tx^{(1)}+b & w^Tx^{(2)}+b & \cdots & w^Tx^{(m)}+b\end{array}\right] z=[z(1)z(2)z(m)]=wTX+b=[wTx(1)+bwTx(2)+bwTx(m)+b]

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

A = [ a ( 1 ) , a ( 2 ) , … , a ( m ) ] = σ ( z ) A=[a^{(1)},a^{(2)},\dots,a^{(m)}]=\sigma(z) A=[a(1),a(2),,a(m)]=σ(z)

二、Shallow Neural Network 浅层神经网络


这一主题讲的是只有一个 hidden layer 的神经网络。该神经网络的前向传播、反向传播。

1. 前向传播

Z [ 1 ] = W [ 1 ] X + b [ 1 ] Z^{[1]}=W^{[1]}X+b^{[1]} Z[1]=W[1]X+b[1]
A [ 1 ] = σ ( Z [ 1 ] ) A^{[1]}=\sigma(Z^{[1]}) A[1]=σ(Z[1])
Z [ 2 ] = W [ 2 ] A [ 1 ] + b [ 2 ] Z^{[2]}=W^{[2]}A^{[1]}+b^{[2]} Z[2]=W[2]A[1]+b[2]
A [ 2 ] = σ ( Z [ 2 ] ) A^{[2]}=\sigma(Z^{[2]}) A[2]=σ(Z[2])

W 1 [ 1 ] = [ w 11 [ 1 ] w 12 [ 1 ] w 13 [ 1 ] ] W_1^{[1]}=\left[\begin{array}{c}w_{11}^{[1]} \\w_{12}^{[1]} \\w_{13}^{[1]} \end{array}\right] W1[1]=w11[1]w12[1]w13[1]

Z [ 1 ] = [ Z 1 [ 1 ] Z 2 [ 1 ] Z 3 [ 1 ] Z 4 [ 1 ] ] = [ ⋯ W 1 [ 1 ] T ⋯ ⋯ W 2 [ 1 ] T ⋯ ⋯ W 3 [ 1 ] T ⋯ ⋯ W 4 [ 1 ] T ⋯ ] × [ x 1 x 2 x 3 ] + [ b 1 [ 1 ] b 2 [ 1 ] b 3 [ 1 ] b 4 [ 1 ] ] Z^{[1]}=\left[\begin{array}{c}Z_{1}^{[1]} \\Z_{2}^{[1]} \\Z_{3}^{[1]} \\Z_{4}^{[1]}\end{array}\right]={\left[\begin{array}{ll}\cdots W_{1}^{[1] T} \cdots \\\cdots W_{2}^{[1] T} \cdots \\ \cdots W_{3}^{[1] T} \cdots \\\cdots W_{4}^{[1] T} \cdots\end{array}\right]}\times \left[\begin{array}{c}x_{1} \\x_{2} \\x_{3}\end{array}\right]+\left[\begin{array}{c}b_{1}^{[1]} \\b_{2}^{[1]} \\b_{3}^{[1]} \\b_{4}^{[1]}\end{array}\right] Z[1]=Z1[1]Z2[1]Z3[1]Z4[1]=W1[1]TW2[1]TW3[1]TW4[1]T×x1x2x3+b1[1]b2[1]b3[1]b4[1]

A [ 1 ] = [ a 1 [ 1 ] a 2 [ 1 ] a 3 [ 1 ] a 4 [ 1 ] ] = σ ( Z [ 1 ] ) A^{[1]}=\left[\begin{array}{c}a_{1}^{[1]} \\a_{2}^{[1]} \\a_{3}^{[1]} \\a_{4}^{[1]}\end{array}\right]=\sigma(Z^{[1]}) A[1]=a1[1]a2[1]a3[1]a4[1]=σ(Z[1])

2. 反向传播

只有一个隐层的神经网络中,已有的参数有 W [ 1 ] W^{[1]} W[1] b [ 1 ] b^{[1]} b[1] W [ 2 ] W^{[2]} W[2] b [ 2 ] b^{[2]} b[2]

该神经网络进行梯度下降需要计算: d Z [ 2 ] , d W [ 2 ] , d b [ 2 ] , d Z [ 1 ] , d W [ 1 ] , d b [ 1 ] dZ^{[2]},dW^{[2]},db^{[2]},dZ^{[1]},dW^{[1]},db^{[1]} dZ[2]dW[2]db[2]dZ[1]dW[1]db[1] 。公式分别如下:

d Z [ 2 ] = A [ 2 ] − Y dZ^{[2]}=A^{[2]}-Y dZ[2]=A[2]Y

d W [ 2 ] = 1 m d Z [ 2 ] A [ 1 ] T dW^{[2]}=\frac{1}{m}dZ^{[2]}A^{[1]T} dW[2]=m1dZ[2]A[1]T

d b [ 2 ] = 1 m np.sum ( d Z [ 2 ] , axis= 1 , keepdims=True ) db^{[2]}=\frac{1}{m}\text{np.sum}(dZ^{[2]},\text{axis=}1,\text{keepdims=True}) db[2]=m1np.sum(dZ[2],axis=1,keepdims=True)

d Z [ 1 ] = W [ 2 ] d Z [ 2 ] × g [ 1 ] ′ ( Z [ 1 ] ) dZ^{[1]}=W^{[2]}dZ^{[2]} \times g^{[1]'}(Z^{[1]}) dZ[1]=W[2]dZ[2]×g[1](Z[1])

d W [ 1 ] = 1 m d Z [ 1 ] X T dW^{[1]}=\frac{1}{m}dZ^{[1]}X^T dW[1]=m1dZ[1]XT

d b [ 1 ] = 1 m np.sum ( d Z [ 1 ] , axis= 1 , keepdims=True ) db^{[1]}=\frac{1}{m}\text{np.sum}(dZ^{[1]},\text{axis=}1,\text{keepdims=True}) db[1]=m1np.sum(dZ[1],axis=1,keepdims=True)

推导思路:用计算图
在这里插入图片描述
在这里插入图片描述

随机初始化

三、activation function 激活函数

激活函数表达式图像导数
sigmoid g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1在这里插入图片描述 g ′ ( z ) = [ 1 − g ( z ) ] g ( z ) g'(z)=[1-g(z)] g(z) g(z)=[1g(z)]g(z)
tanh: g ( z ) = tanh ⁡ ( z ) = e z − e − z e z + e − z g(z)=\tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} g(z)=tanh(z)=ez+ezezez在这里插入图片描述 g ′ ( z ) = 1 − ( tanh ⁡ ( z ) ) 2 g'(z)=1-(\tanh(z))^2 g(z)=1(tanh(z))2
ReLU g ( z ) = m a x ( 0 , z ) g(z)=max(0,z) g(z)=max(0,z)在这里插入图片描述 g ′ ( z ) = { 0 z < 0 1 z > 0 undefine z = 0 g'(z)=\begin{cases}0& z < 0\\1& z > 0 \\\text{undefine}& z=0\end{cases} g(z)=01undefinez<0z>0z=0
leaky ReLU g ( z ) = m a x ( 0.01 z , z ) g(z)=max(0.01z,z) g(z)=max(0.01z,z)在这里插入图片描述 g ′ ( z ) = { 0.01 z < 0 1 z ≥ 0 g'(z)=\begin{cases}0.01& z < 0\\1& z \geq 0 \end{cases} g(z)={0.011z<0z0

激活函数的选择
sigmoid 现在已经不怎么用了,在逻辑回归中可能还会用到。现在一般用到的都是 ReLU。但自己在解决问题时,如果不知道用哪个激活函数,最好每个激活函数都可以用一用,因为各个激活函数都有各自的针对性。

为什么需要用非线性的激活函数?

四、深层神经网络

在这里插入图片描述

输入一系列特征,经过第 1 个隐层计算后,可以理解为形成了一系列新的特征,之后各层也是如此,直到得到最后的输出。

前向传播和反向传播过程

在这里插入图片描述

五、超参数

超参数 hyper parameter 就是那些能够控制参数(如 w w w b b b )的参数。如:
学习率、迭代次数、隐层层数、隐层单元数、激活函数、momentum term、mini batch size 和正则化参数。

附录:符号约定

符号描述
y y y输出标签
n x n_x nx特征向量的维度
x x x特征向量
y ^ \hat y y^模型的输出
( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)) i i i 组数据
m m m样本数量
X = [ x ( 1 ) , x ( 2 ) , … , x ( m ) ] n x × m X=[x^{(1)},x^{(2)},\dots,x^{(m)}]_{n_x \times m} X=[x(1),x(2),,x(m)]nx×m数据集的输入值
Y = [ y ( 1 ) , y ( 2 ) , … , y ( m ) ] 1 × m Y=[y^{(1)},y^{(2)},\dots,y^{(m)}]_{1 \times m} Y=[y(1),y(2),,y(m)]1×m数据集的输出值
M t r a i n M_{train} Mtrain训练集样本个数
M t e s t M_{test} Mtest测试集样本个数
W i j [ l ] W^{[l]}_{ij} Wij[l] l l l 表示第 l l l 层神经链接;
i i i 表示后一层神经元的个数;
j j j 表示前一层神经元的个数
M t e s t M_{test} Mtest测试集样本个数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值