zoukankan      html  css  js  c++  java
  • ML 神经网络 NeuralNetworks

    神经网络

    Neural Networks

    1 为什么要用神经网络?

    既然前面降了逻辑回归,为什么还需要神经网络呢?前面我们制定在非线性分类问题中,也可以使用逻辑回归进行分类,不过我们的特征变量就变成了原始特征的高阶多项式。假设有100个特征变量,要使用逻辑回归进行分类的话,特征就呈指数增长,不仅计算量十分大,而且很容易过拟合。

    2 模型表示

    神经元模型

        单个神经元可以是一个逻辑回归模型。

    基本神经网络

        由多个神经元组成,一般有输入层、隐层和输出层。

    写成向量形式:

    3 举例Examples and intuitions

    首先我们看看sigmoid函数的大致图像,对于线性的分类,我们使用一个神经元就可以完成了。

    而对于非线性的分类,例如XNOR运算,我们将多个神经元组成一个神经网络可以表达更复杂的模型。

    多分类

    4 代价函数 cost function

    先回顾一下逻辑回归的代价函数:

    现在给出神经网络的代价函数:

    正则项其实就是把除了偏置外所有的参数相加。

    5 后向传播算法Backpropagation algorithm

    我们要使用梯度下降来计算参数时,需要计算出

    先使用前向传播算法:

    然后计算出每层的残差,进行后向传播:

    由于输入层直接使用的是输入数据,不存在误差,所以只用计算到第二层。

    具体的算法:

    Backpropagation algorithm

    Training set

    Set

    For

        Set

        Perform forward propagation to compute

        Using

        Compute

       

     

    梯度检验

    在进行后向传播算法训练参数前,为了确保我们的代码计算偏导是正确的,我们可以使用梯度检验。其实就是用数值计算偏导的方法。不过在训练时,一定要记得把梯度检验关掉,因为数值计算偏导十分耗时。

    6 随机初始化 Random initialization

    在线性回归和逻辑回归中,我们对参数初始化都是赋值为0,那么我们在神经网络中是否也可以全部赋值为0 呢?这样是不行的,如果全部赋值为0,那么每层的每个单元会学习到同样的参数,每个单元也就无法体现出自己的效果了。所以我们要打破这种情况,采取随机初始化。

    7 总结 Putting it together

    对于一个神经网络,有输入,输出和隐层,那么我们如何去选择每层有多少单元呢?输入层和输出层的结构我们根据要解决的问题要选定,那么对于隐层我们一般会选取含有同样个数的单元。

    训练一个神经网络的主要步骤:

    1. 随机初始化权重。
    2. 使用向前传播算法,对于每一个输入计算得到
    3. 计算代价函数
    4. 使用后向传播算法计算偏导
    5. 用梯度检验验证的正确性(训练的时候记得要把梯度检验关掉)
    6. 使用梯度下降法最小化,求出参数。

    是一个非凸的,可能收敛到局部最小。

  • 相关阅读:
    HDU 5213 分块 容斥
    HDU 2298 三分
    HDU 5144 三分
    HDU 5145 分块 莫队
    HDU 3938 并查集
    HDU 3926 并查集 图同构简单判断 STL
    POJ 2431 优先队列
    HDU 1811 拓扑排序 并查集
    HDU 2685 GCD推导
    HDU 4496 并查集 逆向思维
  • 原文地址:https://www.cnblogs.com/robert-dlut/p/4441731.html
Copyright © 2011-2022 走看看