李宏毅机器学习作业1
学习打卡任务内容:
-
了解什么是Machine learning
-
学习中心极限定理,学习正态分布,学习最大似然估计
- 推导回归Loss function
- 学习损失函数与凸函数之间的关系
- 了解全局最优和局部最优
-
学习导数,泰勒展开
- 推导梯度下降公式
- 写出梯度下降的代码
-
学习L2-Norm,L1-Norm,L0-Norm
- 推导正则化公式
- 说明为什么用L1-Norm代替L0-Norm
- 学习为什么只对w/Θ做限制,不对b做限制
machine learning
机器学习,就是“根据所给数据,寻找一个函数,给出适当输出”。通过这个函数,我们可以给它一个输入,得到理想的、正确的输出。我们通常需要给它数据,训练一个机器的学习能力。
机器学习三部曲
Step1: model --a set of function
建立一个模型,该模型中会包含成千上万的function
Step2: Goodness of function
根据某个规则来评价模型的好坏
Step3: pick a best of function
挑选一个最好的模型
Regression
线性回归的定义是:对应输入的数据,能够找到一个函数使得输出值与原来输出值非常接近,输出值是数值型的。
中心极限定理
中心极限定理:
样本的平均值约等于总体的平均值。
不管总体是什么分布,任意一个总体的样本平均值都会围绕在总体的整体平均值周围,并且呈正态分布。
线性回归的loss function推导
假设线性回归的方程式为 y^{(i)} = \theta^Tx^{(i)}+\varepsilon^{(i)}其中y^{(i)}为第i个样本预测值,x^{(i)}为第i个样本输入值,\theta^T为参数,\varepsilon^{(i)}为第i个样本误差项。
我们假设误差\varepsilon^{(i)}是独立同分布的,服从均值为0,方差\sigma为的Gaussion分布。则有\varepsilon^{(i)} \sim N(0,\sigma^2),则\varepsilon^{(i)}的密度函数为p(\varepsilon^{(i)}) =\dfrac{1}{\sqrt{2\pi}\sigma} exp(-\dfrac{(\varepsilon^{(i)})^2}{2\sigma^2})由于\varepsilon^{(i)}=y^{(i)}-\theta^Tx^{(i)},则有p(y^{(i)}|x^{(i)};\theta) =\dfrac{1}{\sqrt{2\pi}\sigma} exp(-\dfrac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2})
由于每个样本是独立同分布的,下面采用极大似然估计来估计\theta值,
则有似然函数为
L(\theta)=p(Y|X;\theta)=\prod_{i=1}^n \dfrac{1}{\sqrt{2\pi}\sigma} exp(-\dfrac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2}),
对两边取log有:
\begin{aligned} l(\theta)&=lnL(\theta) \\ &= ln \prod_{i=1}^np(y^{(i)}|x^{(i)};\theta) \\ &=\sum_{i=1}^n \dfrac{1}{\sqrt{2\pi}\sigma} exp(-\dfrac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2}) \\ &=nln\dfrac{1}{\sqrt{2\pi}\sigma} -\dfrac{1}{\sigma^2}* \dfrac{1}{2}\sum_{i=1}^n(y^{(i)}-\theta^Tx^{(i)})^2 \end{aligned}
则对l(\theta)最大化转换成对\dfrac{1}{2}\sum_{i=1}^n(y^{(i)}-\theta^Tx^{(i)})^2的最小化。记J(\theta) = \dfrac{1}{2}\sum_{i=1}^n(y^{(i)}-\theta^Tx^{(i)})^2为线性回归的损失函数。
求gradient descent
根据题图下降的公式可以得出:\theta_j :=\theta_j - \alpha \dfrac{\partial}{\partial x}J(\theta)
这里需要对损失函数求偏导数
\begin{aligned} \dfrac{\partial}{\partial \theta_j}J(\theta) &= \dfrac{1}{2} *\sum_{i=1}^n2(y^{(i)}-\theta^Tx^{(i)}) x_j^{(i)} \\ & =\sum_{i=1}^n(y^{(i)}-\theta^Tx^{(i)}) x_j^{(i)} \end{aligned}
带入上面梯度下降的公式可得:
\theta_j :=\theta_j - \alpha \sum_{i=1}^n(y^{(i)}-\theta^Tx^{(i)}) x_j^{(i)}
logistic Regression的loss function推导
linear Regression得到的预测值是连续的,即y \in(-\infty,\infty),而对于分类问题不适用,为了解决这个问题,我们引入sigmoid函数:g(z) = \frac{1}{1+e^{-z}}, \forall z \in(-\infty,\infty)令 z = \vec{w}\cdot \vec x+b=\sum_{i=1}^nw_ix_i+b有h_{\theta}(x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}}
假设p(y=1|x;\theta) = h_{\theta}(x) p(y=0|x;\theta) = 1-h_{\theta}(x)则有p(y|x;\theta) =(h_{\theta}(x))^y(1-h_{\theta}(x))^{1-y}我们可以写出似然函数:L(\theta) = \prod_{i=1}^np(y^{(i)}|x^{(i)};\theta) = \prod_{i=1}^n(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}}
对上面式子两边求\ln:
\begin{aligned}l(\theta) &= lnL(\theta) \\ &= \sum_{i=1}^n[{y^{(i)}}ln(h_{\theta}(x^{(i)}))+{(1-y^{(i)})(1-h_{\theta}(x^{(i)}))}] \end{aligned}
对l(\theta)求最大化可以转化成对-l(\theta)求最小化:
arg\max_{\theta}l(\theta) = arg\min_{\theta}-l(\theta)
因此可以定义损失函数:J(\theta) =- \sum_{i=1}^n[{y^{(i)}}ln(h_{\theta}(x^{(i)}))+{(1-y^{(i)})(1-h_{\theta}(x^{(i)}))}]
求梯度下降
损失函数:
L(\theta) = -\sum_{i=1}^n [y^{(i)}lnh_\theta(x^{(i)}) + (1-y^{(i)})ln(1-h_\theta(x^{(i)}))]
下面对损失函数求导:
\begin{aligned} \dfrac{\partial}{\partial \theta_j}J(\theta) &= -\sum_{i=1}^n[\dfrac{y^{(i)}}{g(\theta^Tx^{(i)})}*\dfrac{dg(\theta^Tx^{(i)})}{d\theta}-\dfrac{1-y^{(i)}}{1-g(\theta^Tx^{(i)})}*\dfrac{dg(\theta^Tx^{(i)})}{d\theta}] \\ &=-\sum_{i=1}^n[\dfrac{y^{(i)}}{g(\theta^Tx^{(i)})}-\dfrac{1-y^{(i)}}{1-g(\theta^Tx^{(i)})}]*\dfrac{dg(\theta^Tx^{(i)})}{d\theta} \\ &=-\sum_{i=1}^n[\dfrac{y^{(i)}}{g(\theta^Tx^{(i)})}-\dfrac{1-y^{(i)}}{1-g(\theta^Tx^{(i)})}]*g(\theta^Tx^{(i)})*(1-g(\theta^Tx^{(i)})) *x_j^{(i)}\\ &= -\sum_{i=1}^n[y^{(i)}*(1-g(\theta^Tx^{(i)}))-(1-y^{(i)})*g(\theta^Tx^{(i)})] *x_j^{(i)}\\ &= -\sum_{i=1}^n(y^{(i)}-g(\theta^Tx^{(i)}))*x_j^{(i)}\\ \end{aligned}
则有梯度下降公式:\theta_j :=\theta_j - \alpha \sum_{i=1}^n(y^{(i)}-g(\theta^Tx^{(i)})) x_j^{(i)}
梯度下降代码实现:
def gd(x,y,n_iterations,alpha,learning_rate):
W = np.random.randn(x.shape[1])
for i in range(n_iterations):
# LINEAR REGRESSION
y_pred = np.dot(x,W)
error = y_pred - y
# L2 LOSS,MSE
loss = np.mean(0.5 *(error **2) + alpha * 0.5 * np.dot(W.T,W))
print("Iteration {0} | loss is {1}".format(i,loss))
# GRADIENT
grad = np.dot(x.T,error) + alpha * W
# UPDATE WEIGHTS
W = W - learning_rate * grad
return W
正则化
范数是衡量某个向量空间(或矩阵)中的每个向量以长度或大小。范数的一般化定义:对实数p>=1, 范数定义如下:\left \| x \right \|_p := (\sum_{i=1}^{n} \left | x_i \right |^p)^{\frac{1}{p}}
当p=1时,是L1范数,其表示某个向量中所有元素绝对值的和。
当p=2时,是L2范数,表示某个向量中所有元素平方和再开根号。
L1 范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”(Lasso regularization)。范数作为正则项,会让模型参数θ稀疏化, 既让模型参数向量里为0的元素尽量多。在支持向量机(support vector machine)学习过程中,实际是一种对于成本函数(cost function)求解最优,得出稀疏解。
L2 范数作为正则项式让模型参数尽量小,但不会为0,尽量让每个特征对预测值都有一些小的贡献,得出稠密解。
在梯度下降算法的迭代过程中,实际上是在成本函数的等高线上跳跃,并最终收敛在误差最小的点上(此处为未加正则项之前的成本误差)。而正则项的本质就是惩罚。 模型在训练的过程中,如果没有遵守正则项所表达的规则,那么成本会变大,即受到了惩罚,从而往正则项所表达的规则处收敛。 成本函数在这两项规则的综合作用下,正则化后的模型参数应该收敛在误差等值线与正则项等值线相切的点上。
正则化一般具有如下形式:
\min \frac{1}{n}\sum_{i=1}{n}L(y^{(i)},f(x^{(i)}))+\lambda J(f)
说明为什么用L1-Norm代替L0-Norm
一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。
为什么只对w/Θ做限制,不对b做限制
首先正则化主要是为了防止过拟合,而过拟合一般表现为模型对于输入的微小改变产生了输出的较大差异,这主要是由于有些参数w过大的关系,通过对||w||进行惩罚,可以缓解这种问题。而如果对||b||进行惩罚,其实是没有作用的,因为在对输出结果的贡献中,参数b对于输入的改变是不敏感的,不管输入改变是大还是小,参数b的贡献就只是加个偏置而已。举个例子,如果你在训练集中,w和b都表现得很好,但是在测试集上发生了过拟合,b是不背这个锅的,因为它对于所有的数据都是一视同仁的(都只是给它们加个偏置),要背锅的是w,因为它会对不同的数据产生不一样的加权。或者说,模型对于输入的微小改变产生了输出的较大差异,这是因为模型的“曲率”太大,而模型的曲率是由w决定的,b不贡献曲率(对输入进行求导,b是直接约掉的)。
