这系列文章不是为了去研究那些数学公式怎么推导,而是为了能将机器学习的思想快速用代码实现。最主要是梳理一下自己的想法。
感知机
感知机,就是接受每个感知元(神经元)传输过来的数据,当数据到达某个阀值的时候就会产生对应的行为
如下图,对应每个感知元有一个对应的权重,当数据到达阀值u的时候就会执行对应的行为。
u = w0 + w1x1 + w2x2 +......wnxn
对应到垃圾邮件处理上,当u > 0时就是正常邮件。相反则为垃圾邮件
对于这样的模型就可以称之为简单的感知机。也就是一个神经网络的基本单位。
权重向量的更新
上面所提到的w1,w2等就是就是对应每个是否是垃圾邮件的衡量标准,而x1,x2...就是邮件中被监测的词组的数目
比如x1和x2相同的时候,w1和w2的绝对值较大的一方对结果,也就是u的影响更大。所以,我们也把w1,w2....称之为x1,x2..的权重值
向量即为权重向量
根据训练数据中的期待结果和预测结果不断的修改权重即可。那么具体到项目中应该怎么修改w呢
1. 随机为w1,w2,...wn设置一个值
2. 不断重复以下步骤
* 输入训练数据,如果结果不正确就进行修改
* 当所有的训练数据的结果都正确时就结束运算
思想很简单,那么[不正确就修改]这一句话,在简单的感知机中能够很简单的修改,那么在深度神经网络中的时候该怎么计算呢
梯度下降法
首先介绍一个定义[误差函数(即损失函数)]E,即输出结果和期待结果的差值
为了方便以后的计算这个定义又可以改为变化根据向量w的变化误差函数是否在朝着最小变化的方向递进
w和误差函数的关系如下图所示
曲线最下方的w的值即为一次计算所期望的值,如果仔细分析我们可以知道这种计算就是微分计算
而这种变化趋势就是微分计算的值
那么wi的变化过程即为
简单的理解就是当变化趋势为负时wi朝正直方向移动,反之亦然.但是当变化趋势很大的时候wi的变化就会很大,
而变化趋势很小的时候wi的变化就又会很小。这样的计算会让整个过程很难收敛,因此我们会设置一个比较小的正数参数
来参与计算。