cs231n 学习笔记(5)——神经网络part1:建立神经网络架构

引言:

    学习神经网络并不是一定要了解人脑神经结构。
    如前所属,线性分类器可以用公式s=Wx来表示,其中X表示一张图片,是一个[3072*1]的列向量,包含了一副图像里的所有像素点。W是[10*3072]的参数矩阵。两个矩阵相乘的结果是一个[10*1]的列向量,表示了这幅图在分类时,每个类别的得分。
    对线性分类器进行改进, s=W2max(0,W1x),其中W1选择[100*3072]的矩阵,max是非线性计算,可以滤除所有的负数结果。W2是一个[10*100]的矩阵,进过相乘,最终得到的仍旧是一个[10*1]的列向量,即每个分类的得分。在改进的算法中非线性运算是关键,若舍弃,W1和W2直接相乘后,判别函数将回归线性函数。W1和W2可以通过SGD(stochastic gradient descent)算法优化取得。这个改进的算法就是一个最简单的二层神经网络。
    再进一步改进,最简单的三层神经网络可以用公式s=W3max(0,W2max(0,W1x))来表示。W1,W2,W3矩阵中的所有参数都可以通过学习获得。

神经建模

    最早神经网络领域研究的是如何对神经网络的生理结构进行模拟。如今,神经网络是机器学习中的研究热点。我们仍旧从最简单的生理神经网络机制入手,来了解神经网络。

生理刺激与连接

    大脑的最基本计算单元是神经细胞,人脑包含860亿神经细胞。这些细胞通过约10^14 - 10^15 个突触相连接。生理神经和神经工作机制如下图所示:

神经生理机制

    每一个神经细胞通过多个树突( dendrites )获取输入,进过计算将结果通过轴突(axon)输出。轴突连接着另一个神经细胞的树突。将计算结果传递给另一个神经细胞。如图左所示。
    图右是对神经生理结果的建模。每一个树突的输入用WiXi(i=0,1,2,3...)表示。神经细胞将每个树突的输入相加,并加上修正项b。将结果带入激活函数f,激活函数的结果表示了与输出端相连的另一个神经细胞的树突被激活的发生率。sigmoid是常用的激活函数,其输出在0-1之间。

神经建模代码如下:

class Neuron(object):
  # ... 
  def forward(inputs):
    """ assume inputs and weights are 1-D numpy arrays and bias is a number """
    cell_body_sum = np.sum(inputs * self.weights) + self.bias
    firing_rate = 1.0 / (1.0 + math.exp(-cell_body_sum)) # sigmoid activation function
    return firing_rae

换句话说,每一个神经用输入和自身的参数W做内积再加上偏置量b,最后将结果带入激活函数给出神经计算的输出结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皓月如我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值