《python神经网络编程》一

线性回归 ,简单的分类器

在概率统计中,其实这就是一个参数估计的问题。我们可以用最小二乘法来搞定这个参数。用矩估计,区间估计(不行,这里是得到一个确切的参数)。
这里的分类器,更像是利用贝叶斯估计来计算出参数值。
利用样本数据和模型值的误差值,来不断调整模型的斜率,最终得到很好的一个分类效果。书中
t-y =( A+ \Delta A)x -Ax
误差E = \DeltaA x
根据误差值,不断更新斜率。
根据上面的公式的话,只会和最后一个样本值靠近,前面的样本值,好像没什么作用。所以采用了 learningRate 学习率这么个概念。
我们最终是希望,分类准确率足够高。也就是各个点到模型的损失函数\sum e足够小。
题外话:索引就是对整个样本空间的逐级划分。比如B树索引。比如AVL树。

训练模型的时候总是学习误差的一部分

就是把利用线性模型分割整个样本空间。那么只要计算出各个样本数据到这个临界点的损失函数。求导就可以确定斜率是多少。损失函数考虑到了所有的样本数据。对于只有两种情况的分类,损失函数的导函数=0的时候,就是梯度为0 的时候误差最小。这就是线性模型中的梯度下降。

神经网络

当无法用线性模型来划分样本空间的时候。可以采用神经网络
神经元的激活函数 S(x) = \frac{1}{1+e^{-x}}
其函数曲线和导数曲线如下图:

image.png

神经元(相当于一个算子对输入信号,加权求和,然后激活):

image.png

这里,整合的过程是线性加权的过程,各输入特征 之间没有相互作用。激活函数(active function)一般来说则是非线性的,各输入特征 在此处相互作用。
基本的神经网络三层构成。输入层,隐藏层,输出层。
image.png

神经网络通过训练,调整里面的W_{11} W_{12} W_{13} W_{21}等这些权重,来不断减少误差。

在神经网络训练完后,查询时通过矩阵运算,直接算出最终的输出信号。
O = Sigmoid( W.I )
然后这一层的输出就是下一层的输入。

在神经网络中,由于输入信号经过权重的比例分别输送到下一层的各个神经元。我们通过样本值,可以知道,神经网络最后一层的输出误差。那么根据E_o以及按照权重比例反馈回上一层节点。为了简单化,我们
e_{hidden1} = e_{output1} * \frac{w_{11}}{w_{11}+w_{21}} + e_{output2} * \frac{w_{12}}{w_{12}+w_{22}}

e_{hidden1} = 连接W_{11}W_{12} 上的分割误差之和。

image.png

image.png

从图上可以看出每一层的误差之和是相等的。但是实际上,我们少考虑了激活函数。正向传播的时候,激活函数小于1 的,也就是削弱信号,那反向传播的话,隐藏层的误差和,应该大于输出层的误差和。反向传播容易导致梯度消失
几种激活函数的比较

矩阵乘法计算反向传播误差。
error_{hidden} = W_{hidden_output}^T .error_{output}

W_{jk}如何变化的时候,神经网络的误差如何最小化,求偏导函数本质是某个维度上的变化率
方向导数,偏导数,梯度关系

采用梯度下降法,当权重变化时,误差最小。
\frac{\partial E}{\partial W_{jk}}

image.png

image.png
image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如果岁月是一路漫长的旅途,人生则是其中的一道道深浅不一的脚印,且借西风远望,视线中那一排排印痕,有的已被朔风磨去了...
    萌萌哒小新族阅读 232评论 0 1
  • 学习了6个指标。 解读方法需要多练习,勤练习,不停地练习。 信立泰的获利能力相当不错,持续稳定。
    杨国健_c44f阅读 147评论 0 0
  • 今天周三,真快一周过了一半了,每天都要求他认真听讲,别做小动作,还有就是写字的时候要抬头,拿笔姿势!今天下午写...
    轩轩皓皓阅读 331评论 0 0