神经网络基础知识
来源:互联网 发布:变身之网络妖星系统 编辑:程序博客网 时间:2024/06/16 08:06
本周具体工作学习《神经网络与深度学习》这本书
人工神经元( Artificial Neuron )模型
人工神经元是神经网络的基本元素
图中x1~xn是从其他神经元传来的输入信号,wij表示表示从神经元j到神经元i的连接权值,θ表示一个阈值( threshold ),或称为偏置( bias )。则神经元i的输出与输入的关系表示为:
图中 yi表示神经元i的输出,函数f称为激活函数 ( ActivationFunction )或转移函数 ( TransferFunction ),net称为净激活(net activation)。若将阈值看成是神经元i的一个输入x0的权重wi0,则上面的式子可以简化为:
若用X表示输入向量,用W表示权重向量,即:
X = [ x0 , x1 , x2 , ....... , xn ]
则神经元的输出可以表示为向量相乘的形式:
若神经元的净激活net为正,称该神经元处于激活状态或兴奋状态(fire),若净激活net为负,则称神经元处于抑制状态。
图1中的这种“阈值加权和”的神经元模型称为M-P模型 ( McCulloch-PittsModel ),也称为神经网络的一个处理单元( PE, ProcessingElement )。
2. 常用激活函数
激活函数的选择是构建神经网络过程中的重要环节,下面简要介绍常用的激活函数。
(1) 线性函数 (Liner Function )
(2) 斜面函数 (Ramp Function )
(3) 阈值函数 (Threshold Function )
以上3个激活函数都属于线性函数,下面介绍两个常用的非线性激活函数。
(4) S形函数 (SigmoidFunction )
该函数的导函数:
(5) 双极S形函数
该函数的导函数:
S形函数与双极S形函数的图像如下:
图3. S形函数与双极S形函数图像
双极S形函数与S形函数主要区别在于函数的值域,双极S形函数值域是(-1,1),而S形函数值域是(0,1)。
由于S形函数与双极S形函数都是可导的(导函数是连续函数),因此适合用在BP神经网络中。(BP算法要求激活函数可导)
3. 神经网络模型
神经网络是由大量的神经元互联而构成的网络。根据网络中神经元的互联方式,常见网络结构主要可以分为下面3类:
(1) 前馈神经网络 (Feedforward Neural Networks )
前馈网络也称前向网络。这种网络只在训练过程会有反馈信号,而在分类过程中数据只能向前传送,直到到达输出层,层间没有向后的反馈信号,因此被称为前馈网络。感知机(perceptron)与BP神经网络就属于前馈网络。
图4中是一个3层的前馈神经网络,其中第一层是输入单元,第二层称为隐含层,第三层称为输出层(输入单元不是神经元,因此图中有2层神经元)。
图4.前馈神经网络
对于一个3层的前馈神经网络N,若用X表示网络的输入向量,W1~W3表示网络各层的连接权向量,F1~F3表示神经网络3层的激活函数。
那么神经网络的第一层神经元的输出为:
O1 = F1( XW1 )
第二层的输出为:
O2 = F2 ( F1( XW1 ) W2 )
O2=F2(O1W2)
输出层的输出为:
O3 = F3( F2 ( F1( XW1 ) W2 ) W3 )
O3=F3(O2W3)
若激活函数F1~F3都选用线性函数,那么神经网络的输出O3将是输入X的线性函数。因此,若要做高次函数的逼近就应该选用适当的非线性函数作为激活函数。
(2) 反馈神经网络 (Feedback Neural Networks )
反馈型神经网络是一种从输出到输入具有反馈连接的神经网络,其结构比前馈网络要复杂得多。典型的反馈型神经网络有:Elman网络和Hopfield网络。
图5.反馈神经网络
(3) 自组织网络 (SOM ,Self-Organizing Neural Networks )
自组织神经网络是一种无导师学习网络(非监督学习UnsupervisedLearning)。它通过自动寻找样本中的内在规律和本质属性,自组织、自适应地改变网络参数与结构。
图6.自组织网络
4. 神经网络工作方式
神经网络运作过程分为学习和工作两种状态。
(1)神经网络的学习状态
网络的学习主要是指使用学习算法来调整神经元间的联接权,使得网络输出更符合实际。学习算法分为监督学习(Supervised Learning )与无监督学习( UnsupervisedLearning )两类。
监督学习算法将一组训练集 ( trainingset )送入网络,根据网络的实际输出与期望输出间的差别来调整连接权。有导师学习算法的主要步骤包括:
1) 从样本集合中取一个样本(Ai,Bi);
2) 计算网络的实际输出O;
3) 求D=Bi-O;
4) 根据D调整权矩阵W;
5)对每个样本重复上述过程,直到对整个样本集来说,误差不超过规定范围。
BP算法就是一种出色的有导师学习算法。
无监督学习抽取样本集合中蕴含的统计特性,并以神经元之间的联接权的形式存于网络中。
Hebb学习律是一种经典的无导师学习算法。
(2) 神经网络的工作状态
神经元间的连接权不变,神经网络作为分类器、预测器等使用。
5.神经网络实现
1. 数据预处理
在训练神经网络前一般需要对数据进行预处理,一种重要的预处理手段是归一化处理。下面简要介绍归一化处理的原理与方法。
数据归一化,就是将数据映射到[0,1]或[-1,1]区间或更小的区间,比如(0.1,0.9)。
为什么要归一化处理?
<1>输入数据的单位不一样,有些数据的范围可能特别大,导致的结果是神经网络收敛慢、训练时间长。
<2>数据范围大的输入在模式分类中的作用可能会偏大,而数据范围小的输入作用就可能会偏小。
<3>由于神经网络输出层的激活函数的值域是有限制的,因此需要将网络训练的目标数据映射到激活函数的值域。例如神经网络的输出层若采用S形激活函数,由于S形函数的值域限制在(0,1),也就是说神经网络的输出只能限制在(0,1),所以训练数据的输出就要归一化到[0,1]区间。
<4>S形激活函数在(0,1)区间以外区域很平缓,区分度太小。例如S形函数f(X)在参数a=1时,f(100)与f(5)只相差0.0067。
归一化算法
一种简单而快速的归一化算法是线性转换算法。线性转换算法常见有两种形式:
<1>
y = ( x - min )/( max - min )
其中min为x的最小值,max为x的最大值,输入向量为x,归一化后的输出向量为y。上式将数据归一化到 [ 0 , 1 ]区间,当激活函数采用S形函数时(值域为(0,1))时这条式子适用。
<2>
y = 2 * ( x - min ) / ( max - min ) - 1
这条公式将数据归一化到 [ -1 , 1 ]区间。当激活函数采用双极S形函数(值域为(-1,1))时这条式子适用。
6.代码实现
IDE:eclipse
Java Version: jdk1.8
Nueroph是一个基于Java的神经网络框架。
通过程序,简单实现一个简单的感知机并让其学习逻辑运算AND 和OR
由于,现在的数据分析,基本上都是用python语言做的,所以,有在英杰哪里,拿到Python的一段实现逻辑回归的程序,做测试:
# -*- coding: utf-8 -*-
"""
Created on Fri Jul 7 17:19:52 2017
@author: dblab
"""
import numpy
import theano
import theano.tensor asT
rng = numpy.random
N = 400 # training sample size
feats = 784 # number ofinput variables
#logisticregression 逻辑回归
# generate a dataset: D= (input_values, target_class)
D = (rng.randn(N,feats), rng.randint(size=N, low=0, high=2))
training_steps = 10000
# Declare Theanosymbolic variables
x =T.dmatrix("x")
y =T.dvector("y")
# initialize the weightvector w randomly
#
# this and the followingbias variable b
# are shared so theykeep their values
# between trainingiterations (updates)
w =theano.shared(rng.randn(feats), name="w")
# initialize the biasterm
b = theano.shared(0.,name="b")
print("Initialmodel:")
print(w.get_value())
print(b.get_value())
# Construct Theanoexpression graph
p_1 = 1 / (1 +T.exp(-T.dot(x, w) - b)) # Probabilitythat target = 1
prediction = p_1 >0.5 # The predictionthresholded
xent = -y * T.log(p_1) -(1-y) * T.log(1-p_1) # Cross-entropy loss function
cost = xent.mean() +0.01 * (w ** 2).sum()# The cost to minimize
gw, gb = T.grad(cost,[w, b]) # Compute thegradient of the cost
#w.r.t weight vector w and
#bias term b
# (weshall return to this in a
#following section of this tutorial)
# Compile
train = theano.function(
inputs=[x,y],
outputs=[prediction, xent],
updates=((w, w - 0.1 * gw), (b, b - 0.1 *gb)))
predict =theano.function(inputs=[x], outputs=prediction)
# Train
for i inrange(training_steps):
pred, err = train(D[0], D[1])
print("Finalmodel:")
print(w.get_value())
print(b.get_value())
print("targetvalues for D:")
print(D[1])
print("predictionon D:")
print(predict(D[0]))
测试结果:
1表示通过,0表示不通过, 下面的true和false是通过boolean值表示的。
- 神经网络基础知识
- 神经网络基础知识
- 神经网络基础知识简介
- 【科普】卷积神经网络基础知识
- TF-day2 神经网络基础知识
- ANN(人工神经网络)基础知识
- 深度神经网络(DNN)、卷积神经网络(CNN)、循环神经网络(RNN)(神经网络的基础知识)
- 神经网络入门基础知识 neural networks basics
- 神经网络基础知识以及Rosenblatt感知器
- 初学卷积神经网络,基础知识与概念
- 深度学习基础知识(1)神经网络理解
- 神经网络中容易被忽视的基础知识
- C++ 人工智能算法系列一(神经网络算法基础知识)
- 专家系统/模糊理论/神经网络/遗传算法相关基础知识
- 神经网络和CNN的一些基础概念,基础知识的梳理
- 深度学习基础知识(3):实现一个卷积神经网络
- Deep learning:七(基础知识_2)_终于到神经网络了
- 神经网络
- MkDocs 快速入门
- 算法练习(12):Longest Valid Parentheses
- Antenna Placement POJ
- Git常用命令大全
- hdu1298(字典树+dfs)
- 神经网络基础知识
- How to get root access for other users with the visudo
- HDU 5125 Magic Balls DP(LIS变形)
- HDU2665 主席树原理解决静态区间第K大值问题总结 有详细图解和代码解释
- Android自定义View的实现方式(三种)
- RecyclerView的使用及理解
- tensor flow学习网站
- 剑指offer之数组中数字出现一次
- leetcode 365. Water and Jug Problem 两个水杯倒水问题 + Gcd辗转相除法