DeepLearning.AI课程知识总结[1] -- 神经网络&深度学习

(本文是DeepLearning.AI课程笔记)

一个简单的神经网络:

x=(x1,x2,x3)为自变量,Y为因变量。

神经网络应用于有监督学习。神经网络的输入可以是结构数据或非结构数据(图像,语音,文本等)不同神经网络解决不同问题,如CNN用于图像,RNN用于语音、翻译问题等。

以图像二分类问题为例。一个64px*64px的图像在计算机中可表示为3个64*64矩阵(红黄蓝矩阵)。这三个矩阵作为输入,将转化为一个 3*64*64=12288 维列向量X。y=0,1. 

  x= \begin{pmatrix} 255\\ 231\\ ...\\ 255\\ 23\\ ...\\ 255\\ 134\\ ...\end{pmatrix}     N_{x} = 64 \times 64 \times 3 = 12288

有m个图像作为训练集,每个training example表示为:(x^{(1)}, y^{(1)}),(x^{(2)}, y^{(2)}),(x^{(3)}, y^{(3)}),...(x^{(m)}, y^{(m)})

将 m 个 x (12288维向量)组成一个 12288 \times m 矩阵。Y则为m维行向量。

X=\begin{pmatrix} | & |&| & | & \\ x^{(1)} & x^{(2)} & ... & x^{(m)}& \\ |& | & |& |& \end{pmatrix}.          Y= \begin{pmatrix} y^{(1)} & y^{(2)} & ... & y^{(m)} \end{pmatrix}

每个hidden unit会计算X线性组合的activation function(激活函数),可选用sigmoid函数。对单个样本:

\widehat{y} = \sigma (w^{T}x + b).      \sigma = \frac{1}{1 + e^{-z}}      这里    z = w^{T}x+ b          

单个训练样本sigmoid函数的损失函数(lost function)是:

L(\widehat{y}, y) = - ( y \cdot log(\widehat{y})+ (1-y) \cdot log(1-\widehat{y}))

if  y=0   L(\widehat{y},y) =- log(1-\widehat{y}).         

全部训练集的cost function是(cross entropy loss):

J(w, b) = \frac{1}{m} \sum_{i=1}^{m} L(\widehat{y^{(i)}}, y^{(i)}) = -\frac{1}{m} \sum_{i=1}^{m} ( y^{(i)}\cdot log(\widehat{y^{i}}) + (1-y^{(i)}) \cdot log (1- \widehat{y^{(i)}}))

需要训练优化w, b以得到最小的J(w,b)。优化算法可选gradient descent (梯度下降), 重复对J(w,b)函数求偏导,神经网络的computation graph(计算图)可计算求导。

计算图是一种表示方程的图(语言),节点为变量,边为函数计算。例如:

  u = h(x), v = g(u), y=f(v), y = f(g(h(x)))

基于链式法则,该图也可表示微分: \frac{dy}{dx} = \frac{dy}{dv} \frac{dv}{du}\frac{du}{dx}

简单举例,自变量x为二维向量(x1, x2)单个训练样本的二分类问题,求导过程为:

根据链式法则计算lost函数对变量w_{1}, w_{2}的偏导数 \frac{dL(a,y)}{da}\frac{da}{dz}\frac{\partial z}{\partial w_{1}} ,  \frac{dL(a,y)}{da}\frac{da}{dz}\frac{\partial z}{\partial w_{2}}

单个样本的损失函数:L(a, y) = - ( y \cdot log(a)+ (1-y) \cdot log(1-a)).   (a=\widehat{y})

求偏导:

 \frac{dL(a,y)}{da} = -\frac{y}{a}+\frac{1-y}{1-a}            \frac{dL(a,y)}{dz} = \frac{dL(a,y)}{da}\frac{da}{dz} = (-\frac{y}{a}+\frac{1-y}{1-a}) \cdot a(1-a) = a-y

\frac{\partial z}{\partial w_{1}} =x_{1},      \frac{\partial z}{\partial w_{2}} = x_{2}.             \frac{\partial L(a,y)}{\partial w_{1}} = x_{1}(a-y).          \frac{\partial L(a,y)}{\partial w_{2}} = x_{2}(a-y)

m个样本的损失函数:\frac{1}{m} \sum_{i=1}^{m} L(a^{(i)}, y^{(i)}) = -\frac{1}{m} \sum_{i=1}^{m} ( y^{(i)}\cdot log(a^{(i)}) + (1-y^{(i)}) \cdot log (1- a^{(i)}))

求偏导:

 dw_{1} = \frac{\partial L(a,y)}{\partial w_{1}} = \frac{1}{m}\sum_{i=1}^{m}x_{1}^{(i)}(a^{(i)}-y^{(i)}).     dw_{2}=\frac{\partial L(a,y)}{\partial w_{2}} = \frac{1}{m}\sum_{i=1}^{m}x_{2}^{(i)}(a^{(i)}-y^{(i)})

Gradiant Descent (梯度下降,\alpha为learning rate):  

w_{1} = w_{1} - \alpha \cdot dw_{1}.     w_{2} = w_{2} - \alpha \cdot dw_{2}

将m个样本的计算向量化(vectorize):

X=\begin{pmatrix} | & |&| & | & \\ x^{(1)} & x^{(2)} & ... & x^{(m)}& \\ |& | & |& |& \end{pmatrix}  ,    Y = \begin{bmatrix} y^{(1)} & y^{(2)} & y^{(3)}& ...& y^{(m)} \end{bmatrix}

x^{(i)}\begin{pmatrix} n_{x} ,& 1 \end{pmatrix}向量,X是 \begin{pmatrix} n_{x},& m \end{pmatrix}矩阵, w^{T}\begin{pmatrix} 1,& n_{x} \end{pmatrix}向量, Y是\begin{pmatrix} 1,& m \end{pmatrix}向量

X的线性组合,  Z = \begin{bmatrix} z^{(1)} & z^{(2)} & z^{(3)} & ...& z^{(m)} \end{bmatrix}

=w^{T}X + \begin{bmatrix} b& b &b & ... & b \end{bmatrix} =\begin{bmatrix} w^{T} x^{(1)} + b & w^{T} x^{(2)} + b & w^{T} x^{(3)} + b & ...& w^{T} x^{(m)} + b \end{bmatrix}

计算sigmoid函数矩阵

A = \begin{bmatrix} \sigma (z^{(1)})& \sigma (z^{(2)}) & \sigma (z^{(3)})& ...& \sigma (z^{(m)}) \end{bmatrix} = \sigma (Z)

计算偏导函数矩阵

dZ = \begin{bmatrix} dz^{(1)}& dz^{(2)}& dz^{(3)} & ... & dz^{(m)} \end{bmatrix}

= \begin{bmatrix} a^{(1)}-y^{(1)}& a^{(2)}-y^{(2)} & a^{(3)}-y^{(3)} & ... & a^{(m)}-y^{(m)} \end{bmatrix}

=A-Y

dw= \frac{1}{m}\begin{bmatrix} x_{1}^{(1)} & x_{1}^{(2)} & x_{1}^{(3)} & ... & x_{1}^{(m)}\\ x_{2}^{(1)} & x_{2}^{(2)}& x_{2}^{(3)} & ... & x_{2}^{(m)}\\ x_{3}^{(1)} & x_{3}^{(2)}& x_{3}^{(3)}& ... & x_{3}^{(m)}\\ ...& ...& ... & ... & ...\\ x_{n}^{(1)} & x_{n}^{(2)} &x_{n}^{(3)} & ... & x_{n}^{(m)} \end{bmatrix} \begin{bmatrix} dz^{(1)}\\ dz^{(2)}\\ dz^{(3)}\\ ...\\ dz^{(m)} \end{bmatrix} =\frac{1}{m}\begin{bmatrix} x_{1}^{(1)}dz^{(1)} + x_{1}^{(2)}dz^{(2)} + x_{1}^{(3)}dz^{(3)} + ...+ x_{1}^{(m)}dz^{(m)}\\ x_{2}^{(1)}dz^{(1)} + x_{2}^{(2)}dz^{(2)} + x_{2}^{(3)}dz^{(3)} + ...+ x_{2}^{(m)}dz^{(m)}\\ x_{3}^{(1)}dz^{(1)} + x_{3}^{(2)}dz^{(2)} + x_{3}^{(3)}dz^{(3)} + ...+ x_{3}^{(m)}dz^{(m)}\\ ...\\ x_{n}^{(1)}dz^{(1)} + x_{n}^{(2)}dz^{(2)} + x_{n}^{(3)}dz^{(3)} + ...+ x_{n}^{(m)}dz^{(m)}\end{bmatrix}

可知:

dw=\frac{1}{m}XdZ^{T} = \frac{1}{m} X(A-Y)^{T}, 是(n, 1)维向量,(dw^{T} = \frac{1}{m} (A-Y)X^{T}, (1,n)维向量)

神经网络的一个节点表示两步计算:

神经网络每一个layer的每个节点有单独的w向量和b作为参数。第i层的第j个节点用a_{j}^{[i]},举例:

 

对单个样本, . x = \begin{bmatrix} x_{1}\\ x_{2}\\ x_{3}\end{bmatrix}  是(3,1)维向量:

z_{1}^{[1]} = w_{1}^{[1]T}x + b_{1}^{[1]},  .      a_{1}^{[1]} = \sigma (z_{1}^{[1]}) ,这里w_{1}^{[1]T} 是\begin{pmatrix} 1,& 3 \end{pmatrix} 维向量,b_{1}^{[1]},z_{1}^{[1]},a_{1}^{[1]}是矢量

z_{2}^{[1]} = w_{2}^{[1]T}x + b_{2}^{[1]},         a_{2}^{[1]} = \sigma (z_{2}^{[1]})     以下同上,略

z_{3}^{[1]} = w_{3}^{[1]T}x + b_{3}^{[1]},         a_{3}^{[1]} = \sigma (z_{3}^{[1]})

z_{4}^{[1]} = w_{4}^{[1]T}x + b_{4}^{[1]},         a_{4}^{[1]} = \sigma (z_{4}^{[1]})

做矩阵计算,则用W表示参数矩阵,这个layer的  W^{[1]} = \begin{bmatrix} -- & w_{1}^{[1]T} & --\\ -- & w_{2}^{[1]T} & -- \\ -- & w_{3}^{[1]T} & -- \\ -- & w_{4}^{[1]T} & -- \end{bmatrix} 是(4,3)维矩阵,b^{[1]} = \begin{bmatrix} b_{1}^{[1]}\\ b_{2}^{[1]}\\ b_{3}^{[1]}\\ b_{4}^{[1]} \end{bmatrix} 是(4,1)维向量。表达式简化为:

z^{[1]} = W^{[1]}x + b^{[1]},    a^{[1]} = \sigma (z^{[1]})

以向量表示layer 1输出:a^{[1]} = \begin{bmatrix} a_{1}^{[1]}\\ a_{2}^{[1]}\\ a_{3}^{[1]}\\ a_{4}^{[1]}\end{bmatrix}   是(4,1)维向量

z_{1}^{[2]} = w_{1}^{[2]T}a^{[1]} + b_{1}^{[2]},    a_{1}^{[2]} = \sigma (z_{1}^{[2]})  这里w_{1}^{[2]T}是(1,4)维向量, b_{1}^{[2]}z_{1}^{[2]}a_{1}^{[2]}是矢量

z_{2}^{[2]} = w_{2}^{[2]T}a^{[1]} + b_{2}^{[2]},    a_{2}^{[2]} = \sigma (z_{2}^{[2]})  以下同上,略

z_{3}^{[2]} = w_{3}^{[2]T}a^{[1]} + b_{3}^{[2]},    a_{3}^{[2]} = \sigma (z_{3}^{[2]})

z_{4}^{[2]} = w_{4}^{[2]T}a^{[1]} + b_{4}^{[2]},    a_{4}^{[2]} = \sigma (z_{4}^{[2]})

z_{5}^{[2]} = w_{5}^{[2]T}a^{[1]} + b_{5}^{[2]},    a_{5}^{[2]} = \sigma (z_{5}^{[2]})

做矩阵计算,W表示参数矩阵,这个layer的  W^{[2]} = \begin{bmatrix} -- & w_{1}^{[2]T} & -- \\ -- & w_{2}^{[2]T} & -- \\ -- & w_{3}^{[2]T} & -- \\ -- & w_{4}^{[2]T} & -- \\ -- & w_{5}^{[2]T} & -- \end{bmatrix} 是(5,4)维矩阵,b^{[2]} = \begin{bmatrix} b_{1}^{[2]}\\ b_{2}^{[2]}\\ b_{3}^{[2]}\\ b_{4}^{[2]}\\ b_{5}^{[2]} \end{bmatrix} 是(5,1)维向量。表达式简化为:

z^{[2]} = W^{[2]}a^{[1]} + b^{[1]},    a^{[2]} = \sigma (z^{[2]})

以向量表示layer 2输出:z^{[2]} = \begin{bmatrix} z_{1}^{[2]}\\ z_{2}^{[2]}\\ z_{3}^{[2]}\\ z_{4}^{[2]}\\ z_{5}^{[2]}\end{bmatrix}是(5,4)* (4,1)= (5,1)维向量,每个节点输出一个矢量(线性组合),因此是(5,1)

a^{[2]} = \begin{bmatrix} a_{1}^{[2]}\\ a_{2}^{[2]}\\ a_{3}^{[2]}\\ a_{4}^{[2]}\\ a_{5}^{[2]}\end{bmatrix}  是(5,1)维向量

z_{1}^{[3]} = w_{1}^{[3]T}a^{[2]} + b_{1}^{[3]},    a_{1}^{[3]} = \sigma (z_{1}^{[3]}) 输出矢量\widehat{y}

可知:layer n的参数矩阵W^{[n]}的维度是(l_{n}l_{n-1}),l_{n}是n层节点数,l_{n-1}是n-1层节点数,矩阵的每一行是本层每个节点的参数,行数=本层节点数;每个节点和上一层全部节点矩阵乘(线性组合),每个节点的列数是上一层节点数,列数=上一层节点数。

对m个样本,遍历进行相同计算:

for i = 1 to m :

    z^{[1](i)} = W^{[1]}x^{(i)} + b^{[1]}, a^{[1](i)} = \sigma (z^{[1](i)})

    z^{[2](i)} = W^{[2]} a^{[1](i)}+ b^{[2]}, a^{[2](i)} = \sigma (z^{[2](i)})

    z^{[3](i)} = W^{[3]} a^{[2](i)}+ b^{[3]}, a^{[3](i)} = \sigma (z^{[3](i)}) = \widehat{y}^{(i)}       

 将遍历过程转换为矩阵计算:

X = \begin{bmatrix} | & |&| & ... &| \\ x^{(1)} & x^{(2)} & x^{(3)} & ... & x^{(m)} \\ |& |& | & ... &| \end{bmatrix}.  是(n_{x}m)维矩阵,n_{x}是向量x^{(i)}的维数,m是样本数,每一列表示一个样本向量

Z^{[1]} = \begin{bmatrix} | & |&| & ... & |\\ z^{[1](1)} & z^{[1](2)} & z^{[1](3)} & ... &z^{[1](m)} \\ | & |& | & ... & | \end{bmatrix}. 是(l_{1}m)维矩阵,l_{1}是layer 1的节点数, 每一列是该层每个节点和一个样本的线性组合值,这个列向量的维数=(本层节点数,1),这是因为每个节点输出一个线性组合矢量。

A^{[1]} = \begin{bmatrix} | & |&| & ... & |\\ a^{[1](1)} & a^{[1](2)} & a^{[1](3)} & ... &a^{[1](m)} \\ | & |& | & ... & | \end{bmatrix}. 是(l_{1}m)维矩阵,l_{1}是layer 1的节点数,A^{[1]}Z^{[1]}经过sigmoid函数计算后的值,和Z^{[1]}维度相同。

Z^{[2]}A^{[2]}是(l_{2}m)维矩阵,l_{2}是layer 2的节点数,

...

表达式简化为矩阵式:

Forward Propagation(计算\widehat{Y}):

Z^{[1]} = W^{[1]} X + b^{[1]}, A^{[1]} = \sigma (Z^{[1]} ).  (l_{1},m)

Z^{[2]} = W^{[2]} A^{[1]} + b^{[2]}, A^{[2]} = \sigma (Z^{[2]} )   (l_{2},m)

Z^{[3]} = W^{[3]} A^{[2]} + b^{[3]}, A^{[3]} = \sigma (Z^{[3]} ) = \widehat{Y} = \begin{bmatrix} \widehat{y}^{(1)}& \widehat{y}^{(2)} & \widehat{y}^{(3)} & ...& \widehat{y}^{(m)} \end{bmatrix}. (1, m)  

Backward Propagation(损失函数求导)(假设b为0):

dZ^{[3]} = \frac{dL(A^{[3]}, Y)}{dZ^{[3]}} = A^{[3]} - Y   (1,m)维向量

dW^{[3]} = \frac{1}{m} (A^{[3]} - Y)A^{[2]T} = \frac{1}{m}dZ^{[3]}A^{[2]T}   (1, m)* (m, l_{2})  = (1,l_{2})维矩阵

dZ^{[2]} = dW^{[3]T} dZ^{[3]} * \sigma ^{'} (Z^{[2]}).    (l_{2},1) * (1, m) dot  (l_{2},m) =  (l_{2},m)维矩阵

dW^{[2]} = \frac{1}{m}dZ^{[2]}A^{[1]T}   (l_{2},m) * (m, l_{1}) = (l_{2}, l_{1})维矩阵

dZ^{[1]} = dW^{[2]T} dZ^{[2]} * \sigma ^{'} (Z^{[1]})   (l_{1}, l_{2})*  (l_{2},m) dot (l_{1}, m) =  (l_{1}, m) 维矩阵

dW^{[1]} = \frac{1}{m}dZ^{[1]}X^{T}    (l_{1}, m) * (m,n_{x}) = (l_{1}, n_{x}) 维矩阵

Gradient Descent (梯度下降):

W = W - \alpha \cdot dW      Z = Z - \alpha \cdot dZ ,  \alpha是learning rate

Backward Propagation用Computer Graph(计算图)表示:

在这里插入图片描述

W^{[1]}, b^{[1]}, W^{[2]}, b^{[2]}, W^{[3]}, b^{[3]} 都是神经网络参数,W使用服从高斯分布的随机数初始化, b可初始化为0

W^{[i]} = np.random.randn((l_{i}, l_{i-1})) \times 0.01

b^{[i]} = np.zero((l_{i},1))

神经网络的hyperparameters有 learning rate, #hidden layers, #hidden units,  iterations, activation function, momentem, mini batch size....

除了sigmoid函数,其他激活函数有:tanh, ReLU, Leaky ReLU 等,不同的layer可有不同Activation Function

a = \frac{1}{1 + e^{-z}}

a= tanh(z) = \frac{e^{z} - e^{-z}}{ e^{z} + e^{-z}}

 a = max (0, z)

【1】Computational Graph(计算图)

【2】DeepLearning.AI -- Neural Networks and Deep Learning

【3】Pytorch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liskol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值