Monthly Archives: April 2018

项目进度

其实这个神经网络的架构我在几周前就搭好了,但有非常多的 bug,说好的数学推导因为没抽出时间来学 latex 而一拖又拖,打算等买了 iPad 以后用 iPad 直接画图(
在这里把 bug 先列一下,有时间慢慢改….

  1. 在多次学习后的误差和没有改变,初步判断导致这个问题出现的原因是权值没有改变
  2. 曾经权值能正常改变时,单次学习误差总是向 1 趋近,最后等于 1,也就是说各输出节点的输出均为 0,初步判断导致这个问题出现的原因是权值更新公式有一些问题。

Machine Learning 1.人如果没有梦想,和深度神经网络有什么区别

所谓机器学习,就是就是希望计算机能从一定量数据中学得一些知识。为了达到这一目的,人们使用计算机来模拟人的学习过程。我们小时候父母每天教我们说话,认识事物,就是学习的过程。通过高中生物的知识我们知道,我们并不是一生下来就有各种反射(对一些事物的应激)能力的,而是通过在后天的学习的过程中我们渐渐建立了许多神经元,这些神经元为我们处理刺激,并在大脑皮层(或其他正确的地方)产生正确的输出。那么,使用计算机搭建神经网络也是类似的方法,我们用 N 层神经元,每层神经元都有M 个神经元,除此之外我们还有输入层和输出层,每一层的神经元都要对前一层进行处理与向下一层传递。如图就是有两层神经元(我们通常称中间的层为隐含层,即两层隐含层)的神经网络。

其中,图中的每一条线都有它的权重,即这条线所对应的输入在该节点所占的比重。

机器学习通常可以简单地分为两类:监督学习和非监督学习。

监督学习顾名思义,就是在学习数据中告诉计算机正确的解是什么,就如同我们小时候被教的:这个是消防车,这个是警车,这个是坦克车。而非监督学习,就是只给出学习数据,不给出解,让计算机自行摸索其中的规律,就像我们小时候的:“结合原文分析作者在xxx时的内心想法”。

我们主要讨论监督学习,因为我只研究了这个orz

那么,我们知道我们的神经网络有输入,有输出,我们如何在输入与输出之间建立联系呢?我们需要一些非线性的函数来将我们的输入-输出曲线“掰弯”,因为对于我们生活中的多数问题,我们的解法往往是非线性的(这里可以参考这里的数据,先凑活看看超链接,等我攒够钱买了穷人版 iPad 再来画图(逃),因此我们在这里使用非线性函数来将曲线“掰弯”。常用的函数有 sigmoid , ReLU, Tanh。

接着,我们要开始训练该神经网络,我们先随机设置所有的权值,接着,我们使用一组训练数据跑一次,将得到的输出与期待输出做差得到误差,接着,我们以全部输出的误差的和对每个权重求偏导,得到每个权重对误差的贡献速率。我们希望该速率趋近于0,即误差最小。这个过程叫做误差反向传播(Back propagation)接着,我们调整权值,是误差对其的偏导数趋近与0。这个过程叫做梯度下降。


初次学习,如有错误,敬请斧正。