Course 1
监督学习:输入特征x,输出目标y。对数据集进行预测,分为回归和分类
无监督学习:输入特征x,没有目标y,对数据集进行聚类预测,异常检测,降维
线性回归
yi=wxi+b
定义损失函数(成本函数),需要最小化损失函数
J(w,b)=2m1∑i=1m(yi−y^)2
其中yi为真实输出,y^为预测输出
- 为了不让数据集变大而损失也变大,故采用平均平方误差而不是总平方误差
- 1/2是为了方便求导计算
梯度下降
需要最小会损失函数,需要使用梯度下降算法
定义学习率learning_rate
为α,一般α⊆[0,1]
w=w−α∂w∂J(w,b)
b=b−α∂b∂J(w,b)
![pic-1](https://wx3.sinaimg.cn/mw2000/006owk36ly1hy5jl17ew5j31fh0h11kx.jpg)
如果α太小,可以得到答案,但是时间过长
如果α太大,大交叉无法收敛,甚至发散
当参数值每次更新时,J(w,b)变小,导数项(斜率)也会变小,对于固定学习率α,步长也会变小,从而达到局部最优解
对导数项分别求导
∂w∂J(w,b)=m1∑i=1m(f(xi)−yi)xi
∂b∂J(w,b)=m1∑i=1m(f(xi)−yi)
其中f(xi)=wxi+b
对于线性回归损失,他的损失函数图像是一个凹函数,只有一个全局最小值,没有局部最小值
选择合适得到学习率,就可以得到min(J(w,b))
线性回归的梯度下降也是batch gradient descent,批次梯度下降每次更新关心整批的训练样例
多元线性回归
假设特征有n个,定义x=[x1x2x3...],参数w=[w1w2w3...]
则fw,b=w⋅x+b
·
为两个向量的点积(dot)。w⋅x=w1∗x1+w2∗x2+....+wn∗xn
矢量化:利用计算机的并行硬件,代码简洁、运行速度快
多元线性回归的梯度下降
![pic-2](https://wx4.sinaimg.cn/mw2000/006owk36ly1hy5jl0sfumj30t30ecgrb.jpg)
PS: 正规方程:某些机器学习库在后端求w,b的方法,只适用于线性回归,而且速度慢,不要求掌握
特征缩放
不同特征的估计值范围差异很大,梯度下降等高线图可能某些轴范围宽某些窄,梯度下降过程中可能波 动
加快梯度下降速度
避免特征的取值范围差异过大,将其进行缩放,几种常见方法:
- 除以最大值,x1,scale=maxx1, x∈[0,1]
- 均值归一化Mean Normalization
- 求均值μ
- x1=max−minx1−μ
Z-score
归一化
- 求标准差σ,均值μ
- x1=σx1−μ
**判断梯度下降是否收敛:**1. 观察iteration-loss曲线是否平稳 2. 自动收敛测试,当loss小于一个很小的值时停止(难用)
选择合适学习率:从0.001开始,每次乘以3,对比J(w,b)与迭代次数的关系,选择合适的α
特征工程
利用知识和直觉设计新特征,通常通过转化与组合,使模型做出更准确的预测
多项式回归:可以添加xq项更好地拟合数据图像,f(x)=w1x3+w2x2+w1x1+b
此时特征缩放尤为重要
分类-逻辑回归
解决二分类问题
sigmoid函数
输出介于(0,1)
g(z)=1+e−z1,z⊆R
logistic regression:
fw,b(x)=g(w⋅x+b)=1+e−(w⋅x+b)1
输出值可以理解为分类为1的可能性
fw,b(x)=P(y=1∣x;w,b)
决策边界decision boundary
以0.5作为阈值,当w⋅x+b≥0,取值1;当w⋅x+b<0,取值0
w⋅x+b=0称为决策边界
多项式回归也适用于非线性的决策边界
成本函数
如果使用平方误差成本函数,有多个局部最小值,J(w,b)不是凹函数,不适用于逻辑回归
定义J(w,b)=m1∑i−1mL(fw,b(x(i),y(i))
其中L代表单个样例的loss,J代表总的cost
L(fw,b(x(i),y(i))=−log(fw,b(x(i)))ify(i)=1
![pic-4](https://wx3.sinaimg.cn/mw2000/006owk36ly1hy5jl0nuz7j30c005vmxr.jpg)
当y等于1,预测值越靠近1损失越小
L(fw,b(x(i),y(i))=−log(1−fw,b(x(i)))ify(i)=0
![pic-5](https://wx3.sinaimg.cn/mw2000/006owk36ly1hy5jl0oul1j30b8050jrk.jpg)
当y等于0,预测值越靠近0损失越小
简化成本函数
L(fw,b(x(i),y(i))=−y(i)log(fw,b(x(i)))−(1−y(i))log(1−fw,b(x(i)))
得到
J(w,b)=−m1(y(i)log(fw,b(x(i)))+(1−y(i))log(1−fw,b(x(i))))
成本函数是凹函数,便于实现梯度下降
梯度下降
对导数项分别求导
∂w∂J(w,b)=m1∑i=1m(f(xi)−yi)xi
∂b∂J(w,b)=m1∑i=1m(f(xi)−yi)
其中f(xi)=1+e−(w⋅x+b)1
可以使用相似方法进行特征缩放
过拟合问题
过拟合虽然可能完美通过训练集,但是有高方差。应该避免欠拟合(高偏差)和过拟合(高方差)。
解决过拟合
- 收集更多训练数据
- 选择特征的一个子集
- 正则化:减小参数wj的值
正则化
如果不知道哪个特征是重要的,惩罚所有特征,防止过拟合
J(w,b)=2m1∑i=1m(yi−y^)2+αmλ∑j=1nwj2
其中λ为正则化参数,α为学习率,缩放得
J(w,b)=2m1∑i=1m(yi−y^)2+2mλ∑j=1nwj2
参数b是否正则化无关紧要
需要选择合适的λ
对J(w,b)求偏导不断同步更新w,b的值
∂w∂J(w,b)=m1∑i=1m(f(xi)−yi)xi+mλ∑j=1mwj
w=w−α(m1∑i=1m(f(xi)−yi)xi+mλ∑j=1mwj)=(1−αmλ)w+.....
J(w,b)=−m1(y(i)log(fw,b(x(i)))+(1−y(i))log(1−fw,b(x(i))))+2mλ∑j=1nwj2
求导式和线性回归相同,只是需要注意
f(xi)=1+e−(w⋅x+b)1
Course 2
神经网络
起源于设计算法来模拟人脑活动,21世纪定义为深度学习
输入层->隐藏层->输出层
网络层
每一层输入向量x或ai−1,经过当前层中多个逻辑回归处理,输出新的向量a[l],进入到下一层/输出结果
即aj[l]=g(wj[l]⋅a[l−1]+bj[l])
j表示单元序号,l表示层数,g(x)为sigmod
函数
前向传播
从输入初步传递到输出,即为前向传播
一般实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def dense(a_in, W, b, g): units = W.shape[1] a_out = np.zeros(units) for j in range(units): w = W[:, j] z = np.dot(w, a_in) + b a_out[j] = g(z) return a_out def sequential(x): a1 = dense(x, W1, b1) a2 = dense(a1, W2, b2) a3 = dense(a2, W3, b3) f_x = a3 return f_x
|
使用框架进行矢量化加速
模型训练步骤
- 指定如何在给定输入X和参数的情况下计算输出
- 指定损失函数
- 训练模型以最小化损失函数
二元交叉熵损失
L(fw,b(x(i),y(i))=−y(i)log(fw,b(x(i)))−(1−y(i))log(1−fw,b(x(i)))
通过反向传播计算偏导数
激活函数
用ReLU
函数代替sigmoid
激活,g(z)=max(0,z)
![pic-3](https://wx2.sinaimg.cn/mw2000/006owk36ly1hy5jl0w5sdj31hc0peqfs.jpg)
如何选择合适的激活函数?
取决于要预测的y
- 二分类/回归中y可正可负 ——> sigmoid
- 回归中y大于等于0 ——> ReLU
- 对于隐藏层建议使用ReLU
ReLU
常用且更快
为什么需要激活函数?
如果不使用(即使用线性的),得到的结果显然可以仅仅使用线性回归或者逻辑回归求解
多分类问题
softmax回归算法
zi=w1⋅xi+bi
a1=ez1+...+eznez1=P(y=1∣x)
即,设有N个分类
zi=w1⋅xi+bi
ai=∑k=1Neziezi=P(y=i∣x)
a1+a2+...+aN=1
softmax损失函数
loss(a1,a2,...,aN,y)=⎩⎪⎪⎪⎨⎪⎪⎪⎧−log(a1)ify=1−log(a2)ify=2...−log(aN)ify=N
softmax改进
不先计算出ai,再带入损失函数
而是直接loss=−log(ez1+...+ezNez1)
1
| model.compile(loss=SparseCategoricalCrossEntropy(from_logits=True))
|
多标签分类
将每个标签分为一个二分类问题,容易混淆
高级优化方法
Adam
可以自动调整学习率α
对于每个参数都有一个α
其他的网络层
卷积层
有多个卷积层,即卷积神经网络
每一层的单元只查看输入的一部分