zoukankan      html  css  js  c++  java
  • 机器学习笔记——人工神经网络

    人工神经网络(Artificial Neural Networks,ANN)提供了一种普遍而有用的方法从例子中学习值为实数、离散值或向量的函数。

    人工神经网络由一系列简单的单元相互密集连接构成,当中每个单元有一定数量的实值输入(可能是其它单元的输出),并产生单一的实数值输出(可能成为其它单元的输入)。

    适合神经网络学习的问题:

    • 实例是非常多“属性-值”对表示的
    • 目标函数的输出可能是离散值、实数值或者由若干实数或离散属性组成的向量
    • 训练数据可能包括错误
    • 可容忍长时间的训练
    • 可能须要高速求出目标函数值
    • 人类是否能理解学到的目标函数是不要重要的
    感知器
    以一个实数值向量作为输入。计算这些输入的线性组合。然后假设结果大于某个阀值,就输出1,否则输出-1.更精确地,假设输入x1到xn,那么感知器计算的输出为:

    当中每个w i 是一个实数常量,或叫做权值(weight ),用来决定输入xi 对感知器输出的贡献率。
    请注意。常量(w0) 是一个阈值,它是为了使感知器输出 1 。输入的加权和w1x1+w2x2+...+wnxn必须超过的阈值。


    (图片均搜于google)
    为了简化表示。我们假想有一个附加的常量输入x0=1。那么我们就能够把上边的不等式写成上图中的output函数。


    学习一个感知器意味着选择权w0,……,wn的值。
    感知器的表征能力:
    我们能够把感知器看作是n维实例空间(即点空间)中的超平面决策面。

    对于超平面一側的实例。感知器输出1,对于还有一側的实例输出-1。这个超平决策面的方程是

    当然。某些正反例子集合不可能被任一超平面切割。那些能够被切割的成为线性可分(linearly separable)例子集合。

    感知器训练法则

    从随机的权值開始,然后重复地应用这个感知器到每一个训练例子,仅仅要它误分类例子就改动感知器的权值。重复这个过程。知道感知器能正确分类全部的训练例子。
    每一步依据感知器训练法则(perceptron training rule)来改动权值,也就是改动与输入 x相应的权 w法则例如以下:


    当中:

    这里t是当前训练例子的目标输出,O是感知器的输出(1或-1),η是一个正的常数称为学习速率(learning rate)学习速率的作用是缓和每一步调整权的程度。它通常被设为一个小的数值(比如0.1),并且有时会使其随着权调整次数的添加而衰减。

    对于权值的调整是一例一调,也就是输入一个例子,就计算每一个Δwi, 来调整wi的值。一直训练到会收敛到一个能一个能正确分类全部训练例子的权向量,前提是训练例子线性可分,而且使用了充分小的η 。假设数据不是线性可分的,那么不能保证收敛。

    梯度下降和delta法则
    如果训练样本不是线性可分的,那么delta法则会收敛到目标概念的最佳近似。delta法则的关键思想是使用梯度下降(gradient descent)来搜索可能的权向量的如果空间,以找到最佳拟合训练例子的权向量。这个法则为反向传播算法提供了基础,而反向传播算法可以学习多个单元的互联网络。
    最好把delta训练法则理解为训练一个无阀值的感知器。也就是一个线性单元(linear unit),他的输出例如以下:


    总而言之,训练线性单元的梯度下降算法例如以下:
    1. 选取一个初始的随机权向量
    2. 应用线性单元到全部的训练例子
    3. 依据以下的公式计算每一个权值的Δwi
    4. 通过加上Δwi来更新每一个权值,然后反复这个过程



  • 相关阅读:
    java1.8--OptionalInt,OptionalDouble,OptionalLong类
    java1.8--Optional类
    java1.8--Null Object模式
    JDK自带的缓存--包装类的缓存
    函数式编程--lambda表达式对比匿名内部类
    java1.8--改进的接口
    Mybatis Generator(定制化)代码生成器
    Mybatis
    git fork
    git原理图解
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6789372.html
Copyright © 2011-2022 走看看