2.1 二分分类
2.2 logistic 回归
我们这门课不用红色笔写的表示方法,而是把w,b看成两个独立的参数训练他们
2.3 logistic回归损失函数
2.4 梯度下降法
写代码时,用dw或db表示导数。
如果函数变量超过两个,就用花体倒e表示偏导;如果函数只有一个变量,就用d表示导数。
2.5 导数
导数的定义,表示斜率
2.6 更多导数的例子
导数讲解
2.7 流程图
流程图是从左到右的计算
2.8 流程图的导数计算
链式法则求导
2.9 logistic回归中的梯度下降法
2.10 m个样本的梯度下降
这里的J,dw1,dw2,db是作为累加器出现的,所以没有(i)。这一页PPT是一次梯度下降的内容。这里面有两个循环,一个是外面的for从1到m的循环,一个是对每个特征求导数的从1到nx的循环(这里只有两个特征就没有写循环),可以通过向量化的方法摆脱显式的循环。
2.11 向量化
jupyper notebook: shift+enter执行
可以看到用向量化的方法之后耗时少了很多
2.12向量化的更多例子
神经网络编程指导:for循环能不用就不用。
2.13向量化logistic回归
向量X是每个训练集x(i)横向堆叠得到的,Z也是z(i)的横向堆叠。
b是实数,但是在python中它和1m的向量相加时,会自动成为1m个向量,这叫python的广播。
2.14 向量化logistic回归的梯度输出
通过向量化来去掉另一个循环,完成梯度下降的一次迭代(遍历所有训练集):
2.15 python中的广播
求出每种事物的碳水化合物,蛋白质,脂肪占这种事物100g的总卡路里的百分比。
第一行python代码:求得每列的和,得到四个数字;第二行代码让四列每一列都除以对应的和,就得到了答案。
axis=0代表横向求和,axis=1代表竖向。
通过第一行代码cal已经是一个14的矩阵了,不需要调用.shape(1,4)命令,但是这个命令is very cheap to call,所以可以通过它来确保矩阵的形状size是你想要的。
所以第二行代码是让一个34的矩阵除以一个1*4的矩阵。
更一般的形式:
2.16 关于python/numpy向量的说明
python可以让我们写出简洁的代码,同时也容易写出不报错的难易发现的bug。
以下是老师总结的一个减少奇奇怪怪的bug的tip:
不要用这种shape为(5,)(秩为1的数组)的数据结构,不然一些运算结果是很奇怪的
正确做法:使用矩阵,行向量或列向量
确保这是一个矩阵(列向量),这个函数代价很低,要常常使用。也不要害怕调用reshape函数,确保你的矩阵或向量是你需要的维度。
2.17 jupyter/Ipython notebook的快速指南
介绍作业
2.18(选修)logistic 损失函数的解释
对这个概率求最大值也就是对其log求最大值:
最大似然估计:求出一组参数,使这个式子取最大值: