深度学习实战(二):知识回顾
https://2006wzt.github.io/post/深度学习实战(二):知识回顾/
https://2006wzt.github.io
数学基础
2.1 二元分类
我们首先回顾一下机器学习中的二元分类,我们假设输入是一个 64×64 的图片,我们需要判断图片中的是不是猫,这就是一个典型的二分类问题,在计算机中图片的显示通过RGB通道,也就是说这个图片在计算机存储为3个 64×64 的矩阵,我们不妨将这三个矩阵用一个向量表示,那么我们的输入 x 将会是一个大小为 64×64×3=12288 的一维向量。
在此我们统一本次学习中用到的符号表示规范:
① 我们用 (x,y) 表示一个输入的样本,用 nx 表示输入的特征向量的大小, x∈Rnx ,二分类中 y∈{0,1}
② 我们用 m 表示训练集的大小,用 (x(1),y(1)),(x(2),y(2)),...,(x(m),y(m)) 表示第 1−m 个样本
③ 有时会用 M=Mtrain 表示训练集样本大小, m=mtest 表示测试集样本大小
④ 默认 x 为列向量,则用 nx×m 矩阵 X 表示整个输入的特征向量, X=[x(1),x(2),...,x(m)] ,神经网络中通常会这样表示
⑤ 同理标签集表示为 Y=[y(1),y(2),...,y(m)] ,这是一个 1×m 矩阵
2.2 逻辑回归
我们再来回顾一下逻辑回归,对于一个输入的 x ,逻辑回归模型为:
h(x)=y^=σ(wTx+b)=e−(wTx+b)+11=P(y=1∣x)
逻辑回归模型的两个参数为 w,b ,我们可以通过梯度下降的方式训练出这两个参数,首先定义逻辑回归模型的成本函数:
J(w,b)=−m1i=1∑m(y(i)logy^(i)+(1−y(i))log(1−y^(i)))
成本函数是极大似然估计推出的,推导过程可以参考之前的博客逻辑回归 (2006wzt.github.io),进行梯度下降: := 表示迭代
w:=w−α∂w∂J(w,b)b:=b−α∂b∂J(w,b)
吴恩达老师在这部分内容中讲解了很多与导数相关的知识,大家可以自行学习,因为较为基础,博客中将不再阐述。
成本函数的求导过程如下,这与吴恩达老师的计算图思想是一样的:记 z(i)=wTx(i)+b
J(w,b)=−m1i=1∑m(y(i)logσ(z(i))+(1−y(i))log(1−σ(z(i))))∂w∂J(w,b)=∂σ(z)∂J(w,b)⋅∂z∂σ(z)⋅∂w∂z=i=1∑mσ(z(i))(1−σ(z(i)))σ(z(i))−y(i)⋅σ(z(i))(1−σ(z(i)))⋅x(i)=i=1∑m(σ(z(i))−y(i))x(i)∂b∂J(w,b)=∂σ(z)∂J(w,b)⋅∂z∂σ(z)⋅∂b∂z=i=1∑mσ(z(i))(1−σ(z(i)))σ(z(i))−y(i)⋅σ(z(i))(1−σ(z(i)))⋅1=i=1∑m(σ(z(i))−y(i))
此处我们引入一个概念:向量化,这是一个用于提高代码计算效率的方法,简单来说,计算z=wTx+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去确保向量的维数与期望的是相同的。
这一节貌似没什么有新东西,大家可以仅当成一个机器学习知识的回顾,因为吴恩达老师在这部分讲的都是一些很基础的东西,可以自行去观看视频学习,那么下一节将会正式得进入深度学习部分。