音乐播放器
My Brain
 
文章 标签
8

Powered by Gridea | Theme: Fog
载入天数...
载入时分秒...

深度学习实战(二):知识回顾

数学基础

2.1 二元分类

我们首先回顾一下机器学习中的二元分类,我们假设输入是一个 64×64 ~64\times64~的图片,我们需要判断图片中的是不是猫,这就是一个典型的二分类问题,在计算机中图片的显示通过RGB通道,也就是说这个图片在计算机存储为3个 64×64 ~64\times64~的矩阵,我们不妨将这三个矩阵用一个向量表示,那么我们的输入 x ~x~将会是一个大小为 64×64×3=12288 ~64\times64\times3=12288~的一维向量。

在此我们统一本次学习中用到的符号表示规范:
① 我们用 (x,y) ~(x,y)~表示一个输入的样本,用 nx ~n_x~表示输入的特征向量的大小, xRnx ~x\in R^{n_x}~,二分类中 y{0,1} ~y\in\{0,1\}~
② 我们用 m ~m~表示训练集的大小,用 (x(1),y(1)),(x(2),y(2)),...,(x(m),y(m)) ~(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})~表示第 1m ~1-m~个样本
③ 有时会用 M=Mtrain ~M=M_{train}~表示训练集样本大小, m=mtest ~m=m_{test}~表示测试集样本大小
④ 默认 x ~x~为列向量,则用 nx×m ~n_x\times m~矩阵 X ~X~表示整个输入的特征向量, X=[x(1),x(2),...,x(m)] ~X=[x^{(1)},x^{(2)},...,x^{(m)}]~,神经网络中通常会这样表示
⑤ 同理标签集表示为 Y=[y(1),y(2),...,y(m)] ~Y=[y^{(1)},y^{(2)},...,y^{(m)}]~,这是一个 1×m ~1\times m~矩阵

2.2 逻辑回归

我们再来回顾一下逻辑回归,对于一个输入的 x ~x~,逻辑回归模型为:

h(x)=y^=σ(wTx+b)=1e(wTx+b)+1=P(y=1x)h(x)=\hat y=\sigma(w^Tx+b)=\frac{1}{e^{-(w^Tx+b)}+1}=P(y=1|x)

逻辑回归模型的两个参数为 w,b ~w,b~,我们可以通过梯度下降的方式训练出这两个参数,首先定义逻辑回归模型的成本函数:

J(w,b)=1mi=1m(y(i)logy^(i)+(1y(i))log(1y^(i)))J(w,b)=-\frac1m\sum_{i=1}^m\big(y^{(i)}\log \hat{y}^{(i)}+(1-y^{(i)})\log (1-\hat{y}^{(i)})\big)

成本函数是极大似然估计推出的,推导过程可以参考之前的博客逻辑回归 (2006wzt.github.io),进行梯度下降: := ~:=~表示迭代

w:=wαJ(w,b)wb:=bαJ(w,b)bw:=w-\alpha\frac{\partial J(w,b)}{\partial w}\\ b:=b-\alpha\frac{\partial J(w,b)}{\partial b}

吴恩达老师在这部分内容中讲解了很多与导数相关的知识,大家可以自行学习,因为较为基础,博客中将不再阐述。
成本函数的求导过程如下,这与吴恩达老师的计算图思想是一样的:记 z(i)=wTx(i)+b ~z^{(i)}=w^Tx^{(i)}+b~

J(w,b)=1mi=1m(y(i)logσ(z(i))+(1y(i))log(1σ(z(i))))J(w,b)w=J(w,b)σ(z)σ(z)zzw=i=1mσ(z(i))y(i)σ(z(i))(1σ(z(i)))σ(z(i))(1σ(z(i)))x(i)=i=1m(σ(z(i))y(i))x(i)J(w,b)b=J(w,b)σ(z)σ(z)zzb=i=1mσ(z(i))y(i)σ(z(i))(1σ(z(i)))σ(z(i))(1σ(z(i)))1=i=1m(σ(z(i))y(i))\begin{aligned} &J(w,b)=-\frac1m\sum_{i=1}^m\big(y^{(i)}\log \sigma(z^{(i)})+(1-y^{(i)})\log (1-\sigma(z^{(i)}))\big)\\ &\frac{\partial J(w,b)}{\partial w}=\frac{\partial J(w,b)}{\partial \sigma(z)}\cdot\frac{\partial \sigma(z)}{\partial z}\cdot\frac{\partial z}{\partial w}=\sum_{i=1}^m\frac{\sigma(z^{(i)})-y^{(i)}}{\sigma(z^{(i)})(1-\sigma(z^{(i)}))}\cdot \sigma(z^{(i)})(1-\sigma(z^{(i)}))\cdot x^{(i)}=\sum_{i=1}^m(\sigma(z^{(i)})-y^{(i)})x^{(i)}\\ &\frac{\partial J(w,b)}{\partial b}=\frac{\partial J(w,b)}{\partial \sigma(z)}\cdot\frac{\partial \sigma(z)}{\partial z}\cdot\frac{\partial z}{\partial b}=\sum_{i=1}^m\frac{\sigma(z^{(i)})-y^{(i)}}{\sigma(z^{(i)})(1-\sigma(z^{(i)}))}\cdot \sigma(z^{(i)})(1-\sigma(z^{(i)}))\cdot 1=\sum_{i=1}^m(\sigma(z^{(i)})-y^{(i)}) \end{aligned}

此处我们引入一个概念:向量化,这是一个用于提高代码计算效率的方法,简单来说,计算z=wTx+bz=w^Tx+b有两种方法:

import numpy as np
#非向量化方法
z=0
for i in range(n_x):
    z+=w[i]*x[i]
z+=b
#向量化方法
z=np.dot(w,x)+b

一些小技巧是不要吝啬去使用reshape去确保向量的维数与期望的是相同的。

这一节貌似没什么有新东西,大家可以仅当成一个机器学习知识的回顾,因为吴恩达老师在这部分讲的都是一些很基础的东西,可以自行去观看视频学习,那么下一节将会正式得进入深度学习部分。