第一次写文章,写的不好还希望大家见谅。
感觉我们数据分析/科学行业都会经常被调侃成调包侠,所以我想尝试自我挑战一下,真正去学习模型算法背后的基本理论和数学原理(当然有些数学的推导还是省略了),然后在不调包的情况下把模型实现出来,我希望通过把我的个人学习笔记整理起来再分享给大家,也希望能帮助到像我这样的初学者们。
这算是神经网络系列的第一本笔记吧,所以会从最基本(也是用的最多)的线性回归来开始,接下也会讲通用逻辑回归(softMax),然后一步一步的从简单神经网络(如MLP)到更复杂的网络(如CNN,RNN)。笔记是按已经拥有一定线性数学和微积分知识的背景来写,因此一些常见的数学知识不会做详细的讲解。
那我们就开始啦!
在我们用代码去实现模型前,我们会尝试弄懂模型的每个一步骤。
已知数据里面有特征(自变量)【features】 X X X和目标值(因变量)【target】 y y y。线性回归的目的是从新的特征中准确的预测出新的目标。写成数学公式的话,
y ^ = w 1 x 1 + . . . + w m x m + b , \hat{y} = w_{1}x_{1} + ... + w_{m}x_{m} + b , y^=w1x1+...+wmxm+b,
其中 y ^ \hat{y} y^ 代表模型预测的目标, w w w是模型的权重参数【weights】, b b b是偏差【bias/intercept】, m m m代表特征的总数。
把上面的等式矢量化【vectorize】,
y ^ = X W + b , \boxed{\hat{y} = XW + b }, y^=XW+b,
X X X会变成一个 n ∗ m n*m n∗m的矩阵(也就是拥有 n n n个数据点和 m m m个特征, W , y ^ , b W, \hat{y}, b W,y^,b 都是 m ∗ 1 m*1 m∗1的 列向量【column vectors】。
简单来说,我们经常听到的训练模型其实就是算出一组最优化的 ( W , b ) (W,b) (W,b)进而把模型预测得出的误差值控制在最小。
另外一点的是上面的矢量化公式也叫作假设函数【hypothesis function】。
上面提到了模型预测的误差值,我们可以把这个误差值量化,也就是模型里面的损失函数【loss function】,
l ( i ) ( W , b ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 = 1 2 [ ( X ( i ) W + b ) − y ( i ) ] 2 , \boxed{l^{(i)}(W,b) = \frac{1}{2}(\hat{y}^{(i)} - y^{(i)})^2 = \frac{1}{2}[(X^{(i)}W + b) - y^{(i)}] ^2 }, l(i)(W,b)=21(y^(i)−y(i))2=21[(X(i)W+b)−y(i)]2,
其中 i i i指标代表我们算的是每一个数据点,同时这也叫平方损失【squared loss】。另外标量【scalar】 1 / 2 1/2 1/2是随意的(你可以不放或者放别的标量),目的是为了让后面的推导变的更整洁。
当我们把目光放在所有数据时,
L ( W , b ) = 1 n ∑ i = 1 n 1 2 [ ( X ( i ) W + b ) − y ( i ) ] 2 . L(W,b) = \frac{1}{n} \sum_{i=1}^{n} \frac{1}{2}[(X^{(i)}W + b) - y^{(i)}] ^2 . L(W,b)