第一周
1.什么是深度学习
深度学习指的是训练神经网络
神经网络是啥?
比如做一个房价预测,输入一个房子的面积x,通过一个神经元(neuron),输出一个房价y
大点的神经网络就是把这些神经元组合起来
修正线性单元,即ReLU(Rectified linear unit),修正是指取不小于0的值
监督学习
输入一些x,得到一个y
结构化的数据
例如一张表,每个属性都有一个值,
非结构化的数据
例如一张图,一段音频
为什么现在深度学习现在流行起来了呢?
早期的数据很少,传统的模型进入平台期
现在我们能获得很多数据,硬件水平也上来了,算力很高
如何获得一个好的神经网络呢
规模越大的神经网络,和数据越多的神经网络效果约好
我们规定用小写字母m来表示训练集的规模
第二周
1.logistic回归
二分分类问题:根据x得出y是0或1
关于logistic的训练集和测试集
2.关于logistic回归的概述
给出x是一个((n imes m))的实矩阵来表示图像,想要求得是不是一只猫的概率(hat{y}=P(y=1|x)space 其中0lehat{y} le 1)
已知w也是一个((n imes m))的实矩阵,b是一个实数
所以我们根据线性回归得到(hat{y}=sigmoid(w^Tx+b))
(sigmoid(z)=dfrac{1}{z+e^{-z}})
所以在做回归的过程中的关键就是train出w和b
b对映一个拦截器
但是在有些课程中,有一些符号会将w和b合并起来,其中的( heta^0)表示的是b
3.关于logistic的损失函数
有上节课可知(hat{y}=sigmoid(w^Tx+b),wherespace sigmoid(z)=dfrac{1}{z+e^{-z}})
其中为了区分训练样本和测试样本,训练样本((i))所对应的预测值是(hat{y}^{(i)})
损失函数可以定义为(L(hat{y},y)=dfrac{(hat{y}-y)^2}{2}),但是这个函数是非凸的,我们可能得到的是一个局部最优,不利于梯度下降所以这里的损失函数来评估训练结果,(L(hat{y},y)=-(yloghat{y}+(1-y)log(1-hat{y})))
成本函数衡量了w和b在训练集上的效果(J(w,b)=frac{1}{m}sum^{m}_{i=1}L(hat{y}^{(i)},y^{(i)})=-frac{1}{m}sum^{m}_{i=1}(y^{(i)}loghat{y}^{(i)}+(1-y^{(i)})log(1-hat{y}^{(i)})))
评估函数越小越好
4.关于梯度下降法
使用梯度下降方法来训练出w和b,为了找到最小的(j(w,b))值,我们取一点后朝着最快的下降反向往下走,反复执行此操作,直到找到最小值,因为logistic的损失函数是一个凸函数,所以我们可以找到最小值
[w:=w-alpha dw ]其中的(alpha)表示的是学习率,也就是步长,(dw)表示的是J函数关于w的导数,所以,所谓的梯度下降法就是使整体朝着下降速度最快的方向下降,同理,对于参数b,也是一样的、需要注意的是,(dw和db)表示的应该是关于J函数的偏导数
5.关于导数
导数=函数在这点的斜率=函数的变化率
6.关于计算logistic的梯度下降方法
首先logistic的计算公式
(z=w^Tx+b)
(hat{y}=a=sigmoid(z))
(a=sigmoid(z)=dfrac{1}{z+e^{-z}})
(L(a,y)=-(ylog a+(1-y)log(1-a)))
假设有两个特征值x1,x2,输入参数w1,w2和b
(z=w_1x_1+w_2x_2+b)
(L=(a,y))
然后我们来求导可以得到
(da=dl/da=-y/a+(1-y)/(1-a))
(dz=dl/dz=dl/da * da/dz=a-y)
然后我们可以求得(dw)和(db)的值
(dl/dw_1 = dw_1=x_1dz \ dl/dw_2 = dw_2=x_2dz \ dl/db = db=dz)
根据梯度下降的公式进行一次计算
(w_1:=w_1 - alpha dw_1 \ w_2:=w_2 - alpha dw_2 \b:=b - alpha db)
就能得到一次梯度下降的参数
7.m个样本的梯度下降
关于logistic的成本函数在第3节中已有叙述:
(J(w,b)=frac{1}{m}sum^{m}_{i=1}L(a^{(i)},y^{(i)})=-frac{1}{m}sum^{m}_{i=1}(y^{(i)}log a^{(i)}+(1-y^{(i)})log(1-a^{(i)})))
当只有单个样本(w1^{(i)}),(w2^{(i)}),(b^{(i)}),就像上节所示例的那样,
所以此时(alpha J/alpha w_1=1/m * sum_{i=1}^{m} alpha L/alpha w_1)(省略了很多细节
可以发现,这就是把上节的(dw_1)加起来求平均值,所以我们可以用伪代码来实现
8.向量化
我们用向量化后的数值来计算的时间对比于用
for
可以快很多可以看到,向量化之后的运行速度会大幅上升
因为
numpy
可以调用CUP和GPU来进行大量并行运算总之我们能避免使用
for
就尽量避免
9.向量化来实现logistic回归(课后作业)
# 首先:下面是无向量化的实现
10.python中的广播
给一个矩阵求出carb和fat和protein中所占的百分比(使用向量化
import numpy as np
A = np.array([[56.0, 0.0, 4.4, 68.0], [1.2, 104.0, 52.0, 8.0],
[1.8, 135.0, 99.0, 0.9]])
temp1 = A.sum(axis=0)
p = 100 * A / (temp1.reshape(1, 4))
print(p)