吴恩达深度学习笔记02

今天的学习内容为logistic回归中的梯度下降法:
当我们知道了logistic回归的模型和梯度下降的原理之后,就要将梯度下降的方法运用到logistic回归中。
1、基本公式
z=wx+b
y(预测) = a = sigmoid(z)
L(a,y) = -(ylog(a) + (1-y)log(1-a))
这三个公式分别是:第一个是logistic回归的模型公式,w是一个一维的向量,向量中参数的个数与x这个向量的特征的个数是对应的,就比如x有两个特征x1和x2,那么w中就有w1和w2对应;第二个式子是激活函数的式子,说白了其实就是将输出值规定在[0,1]之间的函数;第三个式子是损失函数,其可以计算出单个样本的偏差值。

2、单个样本计算方式
假设我们的样本只有2个特征值x1和x2,那么我们总共有x1、x2、w1、w2、b这5个参数作为输入。然后我们依据上面的公式的内容进行逐步计算(就相当于前向传播):
第一:z = w1x1 + w2x2 + b;
第二:y(预测) = a = sigmoid(z);
第三:L(a,y) = -(ylog(a) + (1-y)log(1-a));(PS:a就是y(预测),y是实际训练集的数据)
到这里正向的计算全部完成,接下要进行dL/dw1、dL/dw2和dL/db的计算,然后根据使用
w1:= w1-adw1、w2:= w2-adw2、b:= b-a*db,这3个更新的式子来更新三个参数的值,这样一次梯度下降的工作就完成了,这里解释一下,更新式子中dw1代表了dL/dw1,其他两个式子同理。式子中的a代表学习率,就是每次梯度下降的步伐大小。

3、m个样本计算
当扩展到多个样本来计算时就需要使用成本函数的式子了。
J(w,b) = 1/m (E L(a(i),y(i)));PS:式子中的E代表累加符,L(a(i),y(i))就是上面单个样本的损失函数,只不过参数中带上了i这个序号标识。
接下来要计算导数,dJ/dw1、dJ/dw2、dJ/db这三个值因为是单个样本的累加,所以dJ/dw1 = 1/m(E dL/dw1),就是将每一个样本的损失函数的导数计算出来之后取平均值,另外两个的值同样的道理。

4、m个样本一次梯度下降的伪代码(视频中吴恩达老师手写的)

J=0;dw1=0;dw2=0;db=0;
For i=1 to m:
	z(i) = wx(i)+b;
	a = sigmod(z(i))
	J += -[y(i)log(a(i)) + (1-y(i))log(1-a(i))]
	dz(i) = a(i) - y(i)
	dw1 += x1(i)dz(i)
	dw2 += x2(i)dz(i)
	db += dz(i)
J /= m
dw1 /= m
dw2 /= m
db /= m
w1:= w1 - a(学习率)dw1
w2:= w2 - a(学习率)dw2
b:= b - a(学习率)db

5、向量化
上面的伪代码中其实总共有两个for循环嵌套,一个很明显就是用来遍历m个样本的,另一个循环在上面的代码中没有体现出来是因为我们假设样本的特征值只有两个w1和w2,但是一般情况特征不会只有这么一点的,所以在计算每个特征的导数的时候需要一个循环。
吴恩达老师在视频中演示了使用for循环和使用向量的计算时间,向量计算几乎是for循环计算的0.001倍,由此可见向量化计算可以为模型的训练节省大量的时间。
首先将内层的特征变量的计算变成向量:每一个样本的特征直接看成是一个向量,就可以直接进行向量的计算,减少一层循环。

接下来将m个样本的遍历使用向量代替(也是将m个样本看成是一个矩阵,这一部分先留个坑,目前我还没有吃透这部分内容,明天再来继续品一下这个内容的视频然后再记录)

接着一个没有for循环的一次梯度下降就完成了,然后使用for循环来进行梯度下降的迭代即可。

今天的笔记就到这里!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值