美文网首页我爱编程
cs231n#2: neural-networks-1

cs231n#2: neural-networks-1

作者: db24cc | 来源:发表于2018-04-16 22:18 被阅读0次

    agenda

    • 简介
    • 神经建模
      • 生物学启发和对照
      • 常用激活函数
    • 神经网络结构
      • 表达能力
      • 设计神经网络结构

    简介

    和之前线性分类区别, 经过矩阵运算后后面接一个激活函数(activation function)实现非线性.比如class score = W2*(max(W1xX,0)), 注意没有激活函数(这里是max), W2xW1总是等于一个矩阵W, 正式激活函数实现了非线性.

    神经建模

    神经网络是从生物学神经结构迁移过来的结构

    • 生物学启发和对照

      摘自笔记的原图: 神经元,下游的神经元释放的信号到达一定强度造成上游神经元的显性(the neuron can fire), 显性的神经元通过轴突(axon)释放信号.对于下游信号强度的控制对应数学模型就是激活函数, 由于历史原因,通常激活函数是sigmoid函数(1/1 + e^X), 简单代码如下:
      class Neuron(object):
      # ... 
      def forward(self, 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_rate
      
    • 常用激活函数

      左边的是sigmod, 右边的是tanh.两个都有问题, 现在用的比较少了
      Sigmoids saturate and kill gradients.在y值接近0-1出,倒数基本为0, 反向传播时local gradient*activation out, 假如local gradient太小, 参数基于不更新, 网络难以收敛.假如参数初始化比较大, 网络也难以收敛
      Sigmoid outputs are not zero-centered. sigmod的output都是>=0的, 这样所以local gradient*activation out总是恒正或者恒负, 导致所有同向更新(zig-zagging dynamics in the gradient updates for the weights)
      Sigmoid compute expensive than relu.
      tanh除了0-1好转之外, 也存在梯度消失的问题.
      Relu之前几年比较流行, 收敛速度是sigmoid是6倍.
      计算简单, 没有梯度消失的问题, 但是需要注意网络死亡的现象,假如发现40%的参数已经再也不更新了,就需要重新设置学习率

    神经网络结构

    一般输入层不算,除了最终输出都是都是隐藏层.每一层神经元和下一层每一个神经元都有链接即为全连接层(FC).左边网络6个神经元,一共26个可学习的参数( [3 x 4] + [4 x 2] = 20 weights and 4 + 2 = 6 biases).右边网络9个神经元,41个参数(3x4 + 4 + 4x4 + 4 + 4x1 + 1)
    - 表达能力
    一言以蔽之:It turns out that Neural Networks with at least one hidden layer are universal approximators. 一层就可以任意的表示能力, 为什么还需要多层.这是一个经验科学, 更深的神经网络更容易训练(不是CNN).

    the fact that deeper networks (with multiple hidden layers) can work better than a single-hidden-layer networks is an empirical observation, despite the fact that their representational power is equal.As an aside, in practice it is often the case that 3-layer neural networks will outperform 2-layer nets, but going even deeper (4,5,6-layer) rarely helps much more

    设计神经网络结构

    面对一个实际的问题,如何设计神经网络呢?
    增加一层网络内的神经元个数可以增强网络的表达能力.假如我们有一个2分类的问题, 不同神经元数目拟合的函数如下:


    这个链接ConvNetsJS demo.可以直观的感受出神经网络表达能力.但是过于复杂的表达能力会学习到训练数据的特有特征造成过拟合(overfiting).
    这不是表示每一层内要用尽量小的网络,后面会介绍克制过拟合的手段(L2 regularization, dropout).不使用小的网络的原因是小的网络难以训练,小的网络包含很少的loss低估(local minima),所以它们难以收敛. 在小的网络中陷入bad minima也可能非常幸运参数初始化非常好进入了good minima(loss方差很小).但是大的网络最终loss的方差更小
    最后通过L2 regulation控制过拟合, 系数越大去除过拟合效果越强烈.

    相关文章

      网友评论

        本文标题:cs231n#2: neural-networks-1

        本文链接:https://www.haomeiwen.com/subject/kwxykftx.html