神经网络基础之线性运算模型

1.线性运算模型

当我们说模型时,我们实际上在谈论根据输入x预测输出y的算法。比如,x可以是一个人的工作年限,y可以是他的月薪,我们可以用某种算法来根据一个人的工作年限来预测他的收入。比如y:
y = f ( x ) = w ∗ x + b y = f(x) = w∗x+b y=f(x)=wx+b
函数f(x)叫做假设,而w、b是它的参数。我们假设参数w=1000,参数b=200,如果某人的工作年限是5年的话,我们的模型会预测他的月薪为:
y = f ( x ) = 1000 ∗ 5 + 500 = 5500 ( 元 ) y=f(x)=1000∗5+500=5500(元) y=f(x)=10005+500=5500()
公司如果按照这个模型决定薪酬,我目前工作9年,那么我的工资应该为9500元,这个根本难以覆盖我在北京的生活成本。所以很明显这个模型是一个人工智障。
作为一个薪酬模型,我们考虑的因素太少了,仅仅包含了工作年限一个特征。正常影响薪酬的因素有很多,比如所处的城市、行业、公司、职务等等,如果把这些因素都考虑进去,模型就会更加靠谱。我们把工作年限、城市、行业、公司、职务这些信息,称之为特征。对于一个在北京IT行业工作了10年,目前在互联网公司做产品总监的一位员工,我们可以用这样的一个特征向量来表示:
x = ( 北京 , I T , 10 , 互联网 , 总监 ) x=(北京,IT,10,互联网,总监) x=(北京,IT,10,互联网,总监)
输入x变成了一个具备5个特征的向量,相对应的,仅仅一个参数w就不够用了,我们应该使用5个参数,每个特征对应一个(因为每个特征对薪酬的影响程度不同,所以权重参数不同)。这样,我们的模型就变成:

y = f ( x ) = w 1 ∗ x 1 + w 2 ∗ x 2 + w 3 ∗ x 3 + w 4 ∗ x 4 + w 5 ∗ x 5 + b y=f(x)=w_1∗x_1+w_2∗x_2+w_3∗x_3+w_4∗x_4+w_5*x_5+b y=f(x)=w1x1+w2x2+w3x3+w4x4+w5x5+b

为了书写和计算方便,偏移量b可以按照如下表示:

b = w 0 ∗ x 0 其中 x 0 = 1 b=w_0∗x_0其中x_0=1 b=w0x0其中x0=1

这样上面的式子就可以写成

y = h ( x ) = w 1 ∗ x 1 + w 2 ∗ x 2 + w 3 ∗ x 3 + w 4 ∗ x 4 + w 5 ∗ x 5 + w 0 ∗ x 0 y=h(x)=w_1∗x_1+w_2∗x_2+w_3∗x_3+w_4∗x_4+w_5*x_5+w_0∗x_0 y=h(x)=w1x1+w2x2+w3x3+w4x4+w5x5+w0x0

设x向量为: x = ( x 0 , x 1 , x 2 , x 3 , x 4 , x 5 ) x=(x_0,x_1,x_2,x_3,x_4,x_5) x=(x0,x1,x2,x3,x4,x5) w向量为: w = ( w 0 , w 1 , w 2 , w 3 , w 4 , w 5 ) w=(w_0,w_1,w_2,w_3,w_4,w_5) w=(w0,w1,w2,w3,w4,w5);
则上式写成向量的形式为(T:矩阵转置):
y = f ( x ) = w T x y=f(x)=w^Tx y=f(x)=wTx
以上模型就叫做线性模型,因为输出y就是输入特征向量x的线性组合

2.目标函数

在监督学习下,对于一个样本,我们知道它的特征 x ,以及标记 y 。同时,我们还可以根据模型f(x)计算得到输出 y ‾ \overline{y} y 。注意这里面我们用y表示训练样本里面的标记,也就是实际值;用带上划线的 y ‾ \overline{y} y 表示模型计算的出来的预测值。我们当然希望模型计算出来的 y ‾ \overline{y} y和y越接近越好。数学上有很多方法来表示两者的接近程度,比如我们可以用两者的的差的平方的1/2来表示它们的接近程度(乘1/2,是为了后面计算方便)。
E = 1 2 ( y − y ‾ ) 2 E = \frac{1}{2}(y-\overline{y})^2 E=21(yy)2
我们把E叫做单个样本误差

训练数据中会有很多样本,比如N个,我们可以用训练数据中所有样本的误差的,来表示模型的误差E,也就是
e = e 1 + e 2 + e 3 + . . . + e n e = e_1+e_2+e_3+...+e_n e=e1+e2+e3+...+en
上式的 e 1 e_1 e1表示第一个样本的误差, e 2 e_2 e2表示第二个样本的误差…。
E = e 1 + e 2 + e 3 + . . . + e n = ∑ i = 1 n e i = 1 2 ∑ i = 1 n ( y i − y i ‾ ) 2 E = e_1+e_2+e_3+...+e_n \\ =\sum_{i=1}^{n} e_i \\ = \frac{1}{2} \sum_{i=1}^{n} (y_i-\overline{y_i})^2 E=e1+e2+e3+...+en=i=1nei=21i=1n(yiyi)2

其中
y i 为样本中的目标值 y i ‾ = f ( x i ) = w T x i y_i为样本中的目标值 \\ \overline{y_i} =f(x_i) = w^Tx_i yi为样本中的目标值yi=f(xi)=wTxi

x i x_i xi表示第i个训练样本的特征
y i y_i yi表示第个i样本的标记,我们也可以用元组 ( x i , y i ) (x_i,y_i) (xi,yi)表示第i个训练样本
y i ‾ \overline{y_i} yi则是模型对第i个样本的预测值,通过算法计算得出。

对于模型来说,误差最小越好,也就是E的值越小越好。对于特定的训练数据集来说, ( x i , y i ) (x_i,y_i) (xi,yi)的值都是已知的,所以E其实是参数w的函数。
E ( w ) = 1 2 ∑ i = 1 n ( y i − y i ‾ ) 2 = 1 2 ∑ i = 1 n ( y i − w T x i ) 2 E(w) = \frac{1}{2} \sum_{i=1}^{n} (y_i-\overline{y_i})^2 \\ = \frac{1}{2} \sum_{i=1}^{n} (y_i-w^Tx_i)^2 E(w)=21i=1n(yiyi)2=21i=1n(yiwTxi)2
由此可见,模型的训练,实际上就是求取到合适的w,使E取得最小值。这在数学上称作优化问题,而E(w)就是我们优化的目标,称之为目标函数

3.梯度下降优化算法

求函数的极值或者最小值,是一个很简单的数学概念。函数y=f(x)的极值点,就是它的导数f′(x)=0的那个点。因此我们可以通过解方程f′(x)=0,求得函数的极值点(x0,y0)。
计算机不会解方程。但是它可以凭借强大的计算能力,一步一步的去把函数的极值点『试』出来。如下图所示:
深度学习实战教程(二):线性单元和梯度下降

首先,我们随便选择一个点开始,比如上图的x0点。接下来,每次迭代修改x的为x1,x2,x3,…,经过数次迭代后最终达到函数最小值点。

你可能要问了,为啥每次修改的值,都能往函数最小值那个方向前进呢?这里的奥秘在于,我们每次都是向函数y=f(x)的梯度相反方向来修改x。什么是梯度呢?翻开大学高数课的课本,我们会发现梯度是一个向量,它指向函数值上升最快的方向。显然,梯度的反方向当然就是函数值下降最快的方向了。我们每次沿着梯度相反方向去修改x的值,当然就能走到函数的最小值附近。之所以是最小值附近而不是最小值那个点,是因为我们每次移动的步长不会那么恰到好处,有可能最后一次迭代走远了越过了最小值那个点。步长的选择是门手艺,如果选择小了,那么就会迭代很多轮才能走到最小值附近;如果选择大了,那可能就会越过最小值很远,收敛不到一个好的点上。

按照上面的讨论,我们就可以写出梯度下降算法的公式

x n e w = x o l d − η ∇ f ( x ) x_{new} = x_{old} −η∇f(x) xnew=xoldηf(x)

其中,∇是梯度算子,∇f(x)就是指f(x)的梯度。η是步长,也称作学习速率

梯度下降算法可以写成

w n e w = w o l d − η ∇ E ( w ) w_{new}=w_{old}−η∇E(w) wnew=woldηE(w)

如果要求目标函数的最大值,那么我们就应该用梯度上升算法,它的参数修改规则是

w n e w = w o l d + η ∇ E ( w ) w_{new}=w_{old}+η∇E(w) wnew=wold+ηE(w)

有了上面这个式子,我们就可以根据它来写出训练线性单元的代码了。不断优化到最优值附近,把W权重存起来,就是一个训练好的模型。有新的x数据,通过w就能预测比较准的y值。

4.小结

事实上,一个人工智能算法其实只有两部分

  • 模型从输入特征x预测输入y的那个函数f(x)
  • 目标函数 目标函数取最小(最大)值时所对应的参数值,就是模型的参数的最优值。很多时候我们只能获得目标函数的局部最小(最大)值,因此也只能得到模型参数的局部最优值

因此,如果你想最简洁的介绍一个算法,列出这两个函数就行了。

接下来,你会用优化算法去求取目标函数的最小(最大)值。[随机]梯度{下降|上升}算法就是一个优化算法。针对同一个目标函数,不同的优化算法会推导出不同的训练规则。我们后面还会讲其它的优化算法。
其实在机器学习中,算法往往并不是关键,真正的关键之处在于选取特征。选取特征需要我们人类对问题的深刻理解,经验、以及思考。而神经网络算法的一个优势,就在于它能够自动学习到应该提取什么特征,从而使算法不再那么依赖人类,而这也是神经网络之所以吸引人的一个方面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值