第一周
1.什么是深度学习
深度学习指的是训练神经网络
神经网络是啥?
比如做一个房价预测,输入一个房子的面积x,通过一个神经元(neuron),输出一个房价y
大点的神经网络就是把这些神经元组合起来
修正线性单元,即ReLU(Rectified linear unit),修正是指取不小于0的值
监督学习
输入一些x,得到一个y
结构化的数据
例如一张表,每个属性都有一个值,
非结构化的数据
例如一张图,一段音频
为什么现在深度学习现在流行起来了呢?
早期的数据很少,传统的模型进入平台期
现在我们能获得很多数据,硬件水平也上来了,算力很高
如何获得一个好的神经网络呢
规模越大的神经网络,和数据越多的神经网络效果约好
我们规定用小写字母m来表示训练集的规模
第二周
1.logistic回归
二分分类问题:根据x得出y是0或1
关于logistic的训练集和测试集
2.关于logistic回归的概述
给出x是一个\((n\times m)\)的实矩阵来表示图像,想要求得是不是一只猫的概率\(\hat{y}=P(y=1|x)\space 其中0\le\hat{y} \le 1\)
已知w也是一个\((n\times m)\)的实矩阵,b是一个实数
所以我们根据线性回归得到\(\hat{y}=sigmoid(w^Tx+b)\)
\(sigmoid(z)=\dfrac{1}{z+e^{-z}}\)
所以在做回归的过程中的关键就是train出w和b
b对映一个拦截器
但是在有些课程中,有一些符号会将w和b合并起来,其中的\(\theta^0\)表示的是b
3.关于logistic的损失函数
有上节课可知\(\hat{y}=sigmoid(w^Tx+b),where\space 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)=-(y\log\hat{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)}\log\hat{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)=-(y\log 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)