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

2.1 二分

2.1.1 举一个识别猫的例子

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

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

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

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



(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回归的模型

给出一个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(损失/误差函数)---单个训练样本上的表现

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.2.5 计算导数(反向传播)

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

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

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

2.2.6 Gradient Descent(梯度下降法

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

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

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

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

2.2.7 单个样本的梯度下降

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

2.2.8 m个样本的梯度下降

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

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

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

2.2.9 vectorization(向量化)

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

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

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

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

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

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

2.2.10 总结

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

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

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

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

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

接下来是导数的计算:

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

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值