zoukankan      html  css  js  c++  java
  • 神经网络的基本组成

    引入

    回忆一下高中生物中学到的知识:当一个神经元受到足够强的刺激的时候,就会被激活向下一个神经元释放递质,然后激活下一个神经元,以此类推,最终将信号传导到需要的地方。
    那么我们的神经网络也是由此而来建模而来,我们需要着重需要定义的一些量就是:

    1. 怎么样才算足够强的刺激
    2. 如何表示被激活
    3. 如何向下一个神经元传递信息

    神经元

    一般神经网络都会非常大,所以神经元定义要尽量的简单。一般用一个线性组合+激活函数来表示。

    线性组合:

    [g(x)=mathrm{w}^Tmathrm{x} ]

    偏置项隐含表示在(x_0)里。

    激活函数:

    [f(z)=egin{equation} onumberegin{cases}1qquad z>0\0qquad otherwiseend{cases}end{equation} ]

    即用阶跃函数表示激活函数。

    神经元:

    [y=f(x)=egin{equation} onumberegin{cases}1qquad mathrm{w}^Tmathrm{x}>0\0qquad otherwiseend{cases}end{equation} ]

    那么我们可以理解成线性组合表示刺激的大小,而激活函数定义了多大刺激可以激活神经元,最终神经元就表示了这样。
    其实这就是个感知机

    但是这里我们为了后面方便求导,用sigmoid来表示激活函数

    [sigmoid(x)=frac{1}{1+e^{-x}} ]

    激活函数也可以选择普通的阶跃函数,这里选择sigmoid是因为方便后面的求导。

    那么神经元就是:

    [y=frac{1}{1+e^{-vec{w}^Tcenterdotvec{x}}} ]

    神经网络


    那么将神经元用一定的规则进行连接就可以得到神经网络。
    上图是一个全连接(full connected)的神经网络,我们以这个神经网络作为例子。

    这里要对神经网络的一些基本的部分进行说明。

    • 输入层,即输入x的那一层。
    • 输出层,即输出y的那一层。
    • 隐层,输入层和输出层之间不管隔了多少层都叫隐层。

    这里以计算某一个输出(y_1)为例:

    [egin{align} onumber y_1&=sigmoid(vec{w}^Tcenterdotvec{a})\ onumber &=sigmoid(w_{84}a_4+w_{85}a_5+w_{86}a_6+w_{87}a_7+w_{8b}) end{align}]

    那么(a_4)就是:

    [egin{align} onumber a_4&=sigmoid(vec{w}^Tcenterdotvec{x})\ onumber &=sigmoid(w_{41}x_1+w_{42}x_2+w_{43}x_3+w_{4b}) end{align}]

    其他(a)的值同理。

    向量表示

    那么第一个隐层的向量(vec{a})

    [vec{a}= egin{bmatrix} a_4 \ a_5 \ a_6 \ a_7 \ end{bmatrix} ]

    对应的权重:

    [ W= egin{bmatrix} vec{w}_4 \ vec{w}_5 \ vec{w}_6 \ vec{w}_7 \ end{bmatrix}= egin{bmatrix} w_{41},w_{42},w_{43},w_{4b} \ w_{51},w_{52},w_{53},w_{5b} \ w_{61},w_{62},w_{63},w_{6b} \ w_{71},w_{72},w_{73},w_{7b} \ end{bmatrix} ]

    对此过程不清楚的可以翻译参考1。

    由此我们其实可以看出,一层的权重可以用一个矩阵来表示,那么整个神经网络的权重就可以用一个三维的张量来表示了。所有一般来说神经网络的权重会表示成一个三维的数组。

    前向计算

    那么对于这样的一个神经网络:

    我们可以使用这样的一个过程:

    [egin{align} onumber &vec{a}_1=f(W_1centerdotvec{x})\ onumber &vec{a}_2=f(W_2centerdotvec{a}_1)\ onumber &vec{a}_3=f(W_3centerdotvec{a}_2)\ onumber &vec{y}=f(W_4centerdotvec{a}_3)\ onumber end{align} ]

    (vec{x})得到(vec{y})
    这个过程就叫做前向计算。

    参考

    1. 零基础入门深度学习
  • 相关阅读:
    20209/29
    2020/9/30
    2020/10/1
    ATM测试总结报告
    20201020 千锤百炼软工人
    20201024 千锤百炼软工人
    20201025 千锤百炼软工人
    20201023 千锤百炼软工人
    20201018 千锤百炼软工人
    20201022 千锤百炼软工人
  • 原文地址:https://www.cnblogs.com/nevermoes/p/DL_1.html
Copyright © 2011-2022 走看看