神经网络入门基础理解



  • 手写数字的图像识别<av15532370><av16144388><av16577449>

    1. 神经网络结构

    0_1599379064267_Snipaste_2019-10-06_12-32-02.png

    我们以输入一张大小为28x28的手写数字图片为例

    输入的信息量大小为 28x28=784 个神经元

    我们可以把神经元简单理解为存放了一个范围为 [0,1] 数字的容器

    虽然实际上代表一个函数,是通过前一层的输入乘以权重加上一个偏差得到的结果

    假设经过两个隐藏层(Hidden Layers)的处理之后

    输出结果为10个神经元,分别代表识别结果数字为0~9的概率

    2. 隐藏层工作机制的理解

    0_1599379247980_Snipaste_2019-10-06_12-52-14.png

    0_1599379273899_Snipaste_2019-10-06_12-52-43.png

    首先我们反过来思考

    ​ 如果要识别出数字9,我们可能要把9拆分成一个圈和一竖两个小部分来识别

    ​ 如果要识别出一个圈或者一竖,我们又要将其拆分成许多小部分来识别

    然后我们正向考虑

    ​ 我们可以把每一个神经元代表一个笔画的小部分出现的概率

    ​ 当输入一个数字9之后,进入第一个隐藏层,会计算出所有小部分出现的概率

    一个训练好的模型的理想结果是与9相关的部分的神经元保存的数字是1,代表出现概率为1

    与9不相关的部分的神经元保存的数字是0,代表出现概率为0

    ​ 将第一个隐藏层的结果输入到第二个隐藏层会得到由小部分组成的更大部分出现的概率

    ​ 对于9来说理想结果可能是代表一个圈和一竖出现概率的神经元保存的数字为1

    ​ 最后结果的输出我们希望的理想结果是代表9的神经元的概率为1,其余为0

    以上只是对隐藏层工作机制的一种形象理解

    实际上我们会发现隐藏层并没有按照我们预想的这种方式进行

    但是为了便于理解神经网络我们可以暂时这样去思考

    3. 正向传递公式

    0_1599379350347_Snipaste_2019-10-06_21-57-16.png

    0_1599379361921_Snipaste_2019-10-06_22-07-17.png

    以计算第一个隐藏层的神经元数据为例,需要把输入的所有神经元信息都乘以一个权重(weight)取和

    然后加上一个偏置(假定为负数),其中偏置的作用是为了调整神经元被激发的难易程度

    当偏置越小时,得到的数字结果越小,即代表得到的神经元结果越小,概率越小

    最后将结果用一个激励函数进行处理,将结果转换到区间[0, 1]中表示一个概率

    激励函数常见的有Sigmoid Relu等

    0_1599379415290_Snipaste_2019-10-06_22-15-59.png

    0_1599379430720_Snipaste_2019-10-06_22-17-02.png

    第一隐藏层第一个神经元概率计算公式

    0_1599379460406_Snipaste_2019-10-06_22-09-17.png

    第一隐藏层计算使用矩阵形式表示为

    0_1599379508965_Snipaste_2019-10-06_22-13-54.png

    0_1599379525797_Snipaste_2019-10-06_22-09-26.png

    4. 反向传播

    0_1599379556226_Snipaste_2019-10-06_22-22-41.png

    我们先定义以下符号来表示神经元(a),权重(w),偏置(b),理想结果(y),代价函数(c)

    0_1599379569808_Snipaste_2019-10-06_22-37-08.png

    我们先假设只有一个神经元输出的情况

    现在我们要通过调整权重w和偏置b使得输出结果逼近y

    调整的依据是使得代价函数C最小

    0_1599379590543_Snipaste_2019-10-06_22-26-08.png

    于是我们计算代价函数C对w的导数,通过链式法则计算将导数拆分为三部分

    0_1599379634074_Snipaste_2019-10-06_22-31-08.png

    其中z是正向传递公式,a是z经过一个激励函数得到的

    0_1599379646894_Snipaste_2019-10-06_22-32-17.png

    三个导数的结果如下

    0_1599379657125_Snipaste_2019-10-06_22-34-57.png

    代价函数的导数大小表示的是对某个权重的敏感程度(重要程度)

    需要计算所有神经元的导数才能得到最后的偏导结果

    计算c对a的导数也同理,但是由于对a(L-1)有影响的是a(L)层的所有数据,所以要取和

    0_1599379677512_Snipaste_2019-10-06_22-57-05.png

    导数的结果也可以通过链式不断嵌套

    0_1599379700844_Snipaste_2019-10-06_22-50-05.png


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待