zoukankan      html  css  js  c++  java
  • My blog in AI -- 梯度下降算法

    人工神经网络是对生物神经网络的模仿,神经网络对一个问题的学习,需要经历数据输入、网络参数的训练、超参数的调节等部分。

    这次我们来详细讨论一下神经网络的学习过程。

    假设我们要训练一个神经网络去识别一张图片里面是否有一只狗,当然现阶段我们只是宽泛的讨论神经网络处理该问题的流程。

    首先,我们会有一个规范化的图片集,里面包含了各种类型的图片(像素为28*28),有小狗的,没有小狗的,称为训练数据集。还有一个测试数据集,用来验证神经网络的学习情况。

    然后,我们需要设计一个神经网络,用以学习这个问题。假设我们采用S型神经元,并使用如下的网络结构:

    图中输入神经元有784个,因为输入的图片是28*28的。

    图中有两个隐藏层和一个输出层。

    假设我们训练集的大小为n,则训练输入为x1,x2,....,xn

    要训练神经网络,会用一个代价函数,这个代价函数的基本形式为:

      C(w,b), 是权重和偏置的函数。

    我们的目标就是,找到一组权重和偏置,对于所有的输入,神经网络的输出与目标输出之间的差异最小。

    常见的代价函数有:

      二次代价函数:

      

      交叉熵代价函数:

         

    y表示对于输入x的函数,表示期望的输出。a表示输入为x时,网络的输出。

    从上述两种代价函数的形式可以看出,代价函数就是用来标记网络输出与正确值之间的差异。

    神经网络的训练过程正是一个寻找到最佳的权重和偏置,使得对于所有的输入与预期输出的差异最小的过程。

    那么,用什么样的算法进行上述过程的计算呢?

    我们知道,代价函数是权重和偏置的函数,即C(w, b)

    学过高等数学的人应该都知道,对于函数的某一点,沿着梯度的反方向运动,函数的值减小的最快。

    神经网络的梯度下降学习算法正是基于此,我们初始化一个权重和偏置的矩阵,然后沿着代价函数梯度的方向去改变权重和偏置,直到代价函数足够小。

    因此,我们通过如下的规则,来更新权重和偏置,让代价函数逐步变小:

     梳理一下,神经网络的学习过程,大致如下:

    1. 输入x1, 计算a,并代价函数求和中的一项,并对所有样本重复上述过程,得到代价函数C(w,b)

     2.计算所有的偏导分量

    3.更新权重和偏置,重复上述过程。

    从上述过程中,可以看出,如果样本量很大的话,权重和偏置更新的速度就会非常的慢,学习的效率就会变低。

    因此,在生产中,一般都会把样本随机的分成一个一个的小批量数据,计算完一个小批量数据后就可以更新权重和偏置,这样就可以加快学习的速度,这叫随机梯度下降。

  • 相关阅读:
    AWS 磁盘 在线扩容(SSD 磁盘)
    磁盘扩容出错:e2fsck: Bad magic number in super-block while trying to open /dev/vdb1
    manjaro_install_all_in_one
    docker_info_06_stressTest 压力测试
    docker_info_05_registry 仓库管理
    docker_info_04_image 镜像管理
    docker_info_03_volume 数据卷管理
    docker_info_02_network 网络管理
    docker_info_01_install 安装
    docker-ce_install_centos75
  • 原文地址:https://www.cnblogs.com/jen104/p/7574978.html
Copyright © 2011-2022 走看看