这系列文章不是为了去研究那些数学公式怎么推导,而是为了能将机器学习的思想快速用代码实现。最主要是梳理一下自己的想法。
感知机
感知机,就是接受每个感知元(神经元)传输过来的数据,当数据到达某个阀值的时候就会产生对应的行为
如下图,对应每个感知元有一个对应的权重,当数据到达阀值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的变化就又会很小。这样的计算会让整个过程很难收敛,因此我们会设置一个比较小的正数参数
来参与计算。
延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26