Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

2.1 二分

2.1.1 举一个识别猫的例子

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

输入一个图片,判别有猫或无猫,这就是一个简单的二分分类。

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

为了将图片转换成一个特征向量,大家都知道图片由红绿蓝三个像素矩阵组成,假设这个

矩阵是64*64的,我们将之重构(Python里面是用reshape这个方法),将三个矩阵合并为一个

nx(nx即维度,nx=64*64*3)行1列的矩阵。

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)



Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

(x,y)表示一个单独的样本,假设有m个训练集,那m个训练样本就是

{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}。

我们需要一个训练样本和一个测试样本,训练样本就是用来做训练得到合适的参数用的,而

测试样本则是在得到参数后进行测试。

在代码中我们可以用x_train表示训练样本,x_test表示测试样本。将m个训练样本合并到一起

成为一个大矩阵就得到了X,维度为nx*m,即X.shape=(nx,m),同理,Y.shape=(1,m).

2.2 Logistic Regression(逻辑回归)

logistic回归就是一个二分分类(binary classification)算法。通过监督学习,输出为0或1的

一个算法

2.2.1 logistics回归的模型

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

给出一个X,我们期望得到一个y帽,y帽就是一个概率值,代表是否有猫的概率。

Output的那个函数就是logistics回归的模型,那为什么不直接用一个线性的w^T*x+b

来表示呢,而要加一个σ呢,σ(z)=1/1+e^(-z),z即为w^T*x+b,这个就是sigmoid函数。

是因为加了以后很契合,当z很大时,σ(z)就很接近于1;而z很小时,σ(z)就很接近于0.

这和我们希望的一致。

2.2.2 Loss/error Function(损失/误差函数)---单个训练样本上的表现

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

我们不用方差来衡量这个损失,是因为在后面用梯度下降法时会出现很多局部最优解,而

我们希望的是有一个最优解。因此我们用上图的函数来替代,起到和方差一样的效果。即当

y=1时,想要损失函数尽可能的小,那么即要y帽尽可能的大,即最大为1,y=0时也是同理。

这个损失函数就是用来衡量输出值y帽和y之间的接近程度。

2.2.3 Cost Function(成本函数)---全体训练样本上的表现

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

成本函数就是将单个训练样本上的函数进行累加求平均。

2.2.4 损失函数和成本函数是怎么得到的呢?

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

前2行,if y = 1 和 y = 0的这2个条件概率公式很好理解。我们可以将其合并为第三个函数,

为什么这样合并是对的呢,当我们将y=1和y=0分别代入后,就会发现正好是第一行和第二行

的2个函数。我们希望其概率是最大的,由于log函数是单调递增的,我们对P(y|x)取对数

就可以化简为ylogy帽+(1-y)log(1-y帽),这个就是损失函数的相反数,那么为什么损失

函数会有个负号呢,是因为虽然我们期望概率最大但是在logistics回归中我们想要损失最小化,

加了负号后就由单调增变为单调减了。这就得到了损失函数。

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

假设所有的训练样本都是独立同分布的,我们求其最大似然估计。就是要找到一组参数,使得

给定样本的观测值概率最大化。所有这些样本的联合概率就是将概率相乘,让这个概率最大化即让

这个概率的对数最大化(相关内容可以去看概率论与数理统计)。因此经过一系列化简后,我们可以

得到上图第三行的式子,即成本函数的相反数。为什么要去掉负号呢,因为我们虽然期望概率最大,

但是我们希望成本可以最小,因此,去负号后,成本函数就得到了。

2.2.5 计算导数(反向传播)

从左到右计算成本函数即是正向传播,那从成本函数即从右到左计算导数就是一个反向传播过程。

举个很简单的例子,假设J=3(a + bc),计算da,db,dc的过程就是一个反向传播过程。

而在代码中,约定俗成的规矩就是:dJ/da是J对a的导数,我们用da来表示;类似的dJ/db用db。

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

2.2.6 Gradient Descent(梯度下降法

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

我们想要找到参数w,b,使得成本函数最小。函数是凹的,无论从哪点开始,最终应该都能达到

相似的一点去。从最初那点开始,朝最陡的方向下降,不断下降,直到最优,这就是梯度下降法。

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

w:代表更新w的操作;而α代表学习率,控制每一次迭代或梯度下降法中的步长。

经过n次迭代{w: w -α*dw ,b:b -α*db}就可以得到最优参数w,b。

2.2.7 单个样本的梯度下降

计算da,dz,dw,db,不断迭代w,b直到最优

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

2.2.8 m个样本的梯度下降

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

大体上跟单个样本相同,在最外围有个for循环,将m个样本的L(a,y),dz,dw,db累加,最终

求平均。然后就是迭代求w,b。这里有dw1,dw2,是由于有2个特征,如果有n个特征,那么就可以

for循环计算dw1,dw2……dwn。

2.2.9 vectorization(向量化)

为什么我们要向量化呢?因为一般的显示的for循环的效率要比较低,相对来说,向量化后运行的速度

更加快,下面看个简单的例子。

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

由上图可以看到,向量化的版本要比for循环快差不多300倍。

在深度学习中,用GPU加速计算,靠的是SIMD single instruction multiple data(单指令流多数据流),

GPU运算的很快,但其实CPU也还好,只是没有GPU那么快。

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

上图就是将8的版本向量化过后的版本。

2.2.10 总结

对于m个样本训练集,原先是这样的

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

我们将X用(nx,m)维矩阵表示,A用(1,m)维矩阵表示,Z用(1,m)维矩阵表示。即下图:

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

这里面有个比较重要的东西叫广播,在Z=np.dot(w.T,X)+b中,b是一个常数,

它是怎么能和向量运算的呢,这就是Python中的广播机制。它会自动将b扩展为对应得向量。

如前面w.T*X是(1,m)维,那它就会自动扩展为(1,m)维与之计算。

接下来是导数的计算:

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

最后,整理一下就是如下图的形式。

Andrew Ng's deeplearning Course1Week2 Neural Networks Basics(神经网络基础)

这样,我们最终得到了一个高度向量化的且非常高效的logistic回归的梯度下降。