0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

以深度学习为首的人工神经网络详解

lviY_AI_shequ 2017-12-11 13:52 次阅读

神经网络是从生物领域自然的鬼斧神工中学习智慧的一种应用。人工神经网络(ANN)的发展经历的了几次高潮低谷,如今,随着数据爆发、硬件计算能力暴增、深度学习算法的优化,我们迎来了又一次的ANN雄起时代,以深度学习为首的人工神经网络,又一次走入人们的视野。

感知机模型perceptron

不再处理离散情况,而是连续的数值,学习时权值在变化,从而记忆存储学到的知识

神经元输入:类似于线性回归z =w1x1+w2x2 +⋯ +wnxn= wT・x(linear threshold unit (LTU))

神经元输出:激活函数,类似于二值分类,模拟了生物学中神经元只有激发和抑制两种状态。

增加偏值,输出层哪个节点权重大,输出哪一个。

采用Hebb准则,下一个权重调整方法参考当前权重和训练效果

#一个感知机的例子importnumpyasnpfromsklearn.datasetsimportload_irisfromsklearn.linear_modelimportPerceptroniris = load_iris()X = iris.data[:, (2,3)]# petal length, petal widthy = (iris.target ==0).astype(np.int)# Iris Setosa?per_clf = Perceptron(random_state=42)per_clf.fit(X, y)y_pred = per_clf.predict([[2,0.5]]

之后有人提出,perceptron无法处理异或问题,但是,使用多层感知机(MLP)可以处理这个问题

defheaviside(z): return(z >=0).astype(z.dtype)defsigmoid(z): return1/(1+np.exp(-z))#做了多层activation,手工配置权重defmlp_xor(x1, x2, activation=heaviside): returnactivation(-activation(x1 + x2 -1.5) + activation(x1 + x2 -0.5) -0.5)

如图所示,两层MLP,包含输入层,隐层,输出层。所谓的深度神经网络,就是隐层数量多一些。

激活函数

以下是几个激活函数的例子,其微分如右图所示

step是最早提出的一种激活函数,但是它在除0外所有点的微分都是0,没有办法计算梯度

logit和双曲正切函数tanh梯度消失,数据量很大时,梯度无限趋近于0,

relu在层次很深时梯度也不为0,无限传导下去。

如何自动化学习计算权重(backpropagation)

首先正向做一个计算,根据当前输出做一个error计算,作为指导信号反向调整前一层输出权重使其落入一个合理区间,反复这样调整到第一层,每轮调整都有一个学习率,调整结束后,网络越来越合理。

step函数换成逻辑回归函数σ(z) = 1 / (1 + exp(–z)),无论x落在哪个区域,最后都有一个非0的梯度可以使用,落在(0,1)区间。

双曲正切函数The hyperbolic tangent function tanh (z) = 2σ(2z) – 1,在(-1,1)的区间。

The ReLU function ReLU (z) = max (0, z),层次很深时不会越传递越小。

多分类时,使用softmax(logistics激活函数)最为常见。

使用MLP多分类输出层为softmax,隐层倾向于使用ReLU,因为向前传递时不会有数值越来越小得不到训练的情况产生。

以mnist数据集为例

import tensorflowastf# construction phasen_inputs =28*28# MNIST# 隐藏层节点数目n_hidden1 =300n_hidden2 =100n_outputs =10X=tf.placeholder(tf.float32, shape=(None, n_inputs), name="X")y=tf.placeholder(tf.int64, shape=(None), name="y")def neuron_layer(X, n_neurons, name, activation=None): withtf.name_scope(name): n_inputs =int(X.get_shape()[1]) # 标准差初始设定,研究证明设为以下结果训练更快 stddev =2/ np.sqrt(n_inputs) # 使用截断的正态分布,过滤掉极端的数据,做了一个初始权重矩阵,是input和neurons的全连接矩阵 init =tf.truncated_normal((n_inputs, n_neurons), stddev=stddev) W =tf.Variable(init, name="weights") # biases项初始化为0 b=tf.Variable(tf.zeros([n_neurons]), name="biases") # 该层输出 z=tf.matmul(X, W) +b # 根据activation选择激活函数 ifactivation=="relu": returntf.nn.relu(z) else: returnzwithtf.name_scope("dnn"):# 算上输入层一共4层的dnn结构 hidden1 = neuron_layer(X, n_hidden1,"hidden1", activation="relu") hidden2 = neuron_layer(hidden1, n_hidden2,"hidden2", activation="relu") # 直接输出最后结果值 logits = neuron_layer(hidden2, n_outputs,"outputs")# 使用TensorFlow自带函数实现,最新修改成dense函数from tensorflow.contrib.layers import fully_connectedwithtf.name_scope("dnn"): hidden1 = fully_connected(X, n_hidden1, scope="hidden1") hidden2 = fully_connected(hidden1, n_hidden2, scope="hidden2") logits = fully_connected(hidden2, n_outputs, scope="outputs", activation_fn=None)# 使用logits(网络输出)计算交叉熵,取均值为误差withtf.name_scope("loss"): xentropy =tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits) loss =tf.reduce_mean(xentropy, name="loss")learning_rate =0.01withtf.name_scope("train"): optimizer =tf.train.GradientDescentOptimizer(learning_rate) training_op = optimizer.minimize(loss)withtf.name_scope("eval"): correct =tf.nn.in_top_k(logits,y,1) accuracy =tf.reduce_mean(tf.cast(correct,tf.float32))init =tf.global_variables_initializer()saver =tf.train.Saver()# Execution Phasefrom tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("/tmp/data/")# 外层大循环跑400次,每个循环中小循环数据量50n_epochs =400batch_size =50withtf.Session()assess: init.run() forepoch inrange(n_epochs): foriteration inrange(mnist.train.num_examples // batch_size): X_batch, y_batch = mnist.train.next_batch(batch_size) sess.run(training_op, feed_dict={X: X_batch,y: y_batch}) acc_train = accuracy.eval(feed_dict={X: X_batch,y: y_batch}) acc_test = accuracy.eval(feed_dict={X: mnist.test.images,y: mnist.test.labels}) print(epoch,"Train accuracy:", acc_train,"Test accuracy:", acc_test)# 下次再跑模型时不用再次训练了save_path = saver.save(sess,"./my_model_final.ckpt")# 下次调用withtf.Session()assess: saver.restore(sess,"./my_model_final.ckpt") #orbetter, use save_path X_new_scaled = mnist.test.images[:20] Z = logits.eval(feed_dict={X: X_new_scaled}) y_pred = np.argmax(Z, axis=1)

超参数设置

隐层数量:一般来说单个隐层即可,对于复杂问题,由于深层模型可以实现浅层的指数级别的效果,且每层节点数不多,加至overfit就不要再加了。

每层神经元数量:以漏斗形逐层递减,输入层最多,逐渐features更少代表性更强。

激活函数选择(activation function):隐层多选择ReLU,输出层多选择softmax

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4771

    浏览量

    100754
  • ANN
    ANN
    +关注

    关注

    0

    文章

    22

    浏览量

    9197
  • 机器学习
    +关注

    关注

    66

    文章

    8416

    浏览量

    132619

原文标题:【机器学习】人工神经网络ANN

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    详解深度学习神经网络与卷积神经网络的应用

    在如今的网络时代,错综复杂的大数据和网络环境,让传统信息处理理论、人工智能与人工神经网络都面临巨大的挑战。近些年,深度
    的头像 发表于 01-11 10:51 2040次阅读
    <b class='flag-5'>详解</b><b class='flag-5'>深度</b><b class='flag-5'>学习</b>、<b class='flag-5'>神经网络</b>与卷积<b class='flag-5'>神经网络</b>的应用

    人工神经网络原理及下载

    人工神经网络是根据人的认识过程而开发出的一种算法。假如我们现在只有一些输入和相应的输出,而对如何由输入得到输出的机理并不清楚,那么我们可以把输入与输出之间的未知过程看成是一个“网络”,通过不断地给
    发表于 06-19 14:40

    应用人工神经网络模拟污水生物处理

    应用人工神经网络模拟污水生物处理(1.浙江工业大学建筑工程学院, 杭州 310014; 2.镇江水工业公司排水管理处,镇江 212003)摘要:针对复杂的非线性污水生物处理过程,开发了径向基函数的人工
    发表于 08-08 09:56

    人工神经网络课件

    人工神经网络课件
    发表于 06-19 10:15

    人工神经网络算法的学习方法与应用实例(pdf彩版)

    物体所作出的交互反应,是模拟人工智能的一条重要途径。人工神经网络与人脑相似性主要表现在:①神经网络获取的知识是从外界环境学习得来的;②各
    发表于 10-23 16:16

    【专辑精选】人工智能之神经网络教程与资料

    电子发烧友总结了神经网络”为主题的精选干货,今后每天一个主题为一期,希望对各位有所帮助!(点击标题即可进入页面下载相关资料)人工神经网络算法的
    发表于 05-07 19:18

    人工神经网络实现方法有哪些?

    人工神经网络(Artificial Neural Network,ANN)是一种类似生物神经网络的信息处理结构,它的提出是为了解决一些非线性,非平稳,复杂的实际问题。那有哪些办法能实现人工
    发表于 08-01 08:06

    卷积神经网络深度卷积网络:实例探究及学习总结

    深度学习工程师-吴恩达》03卷积神经网络深度卷积网络:实例探究 学习总结
    发表于 05-22 17:15

    解析深度学习:卷积神经网络原理与视觉实践

    解析深度学习:卷积神经网络原理与视觉实践
    发表于 06-14 22:21

    【AI学习】第3篇--人工神经网络

    `本篇主要介绍:人工神经网络的起源、简单神经网络模型、更多神经网络模型、机器学习的步骤:训练与预测、训练的两阶段:正向推演与反向传播、
    发表于 11-05 17:48

    怎么解决人工神经网络并行数据处理的问题

    本文提出了一个基于FPGA 的信息处理的实例:一个简单的人工神经网络应用Verilog 语言描述,该数据流采用模块化的程序设计,并考虑了模块间数据传输信号同 步的问题,有效地解决了人工神经网络
    发表于 05-06 07:22

    卷积神经网络模型发展及应用

    卷积神经网络模型发展及应用转载****地址:http://fcst.ceaj.org/CN/abstract/abstract2521.shtml深度学习是机器学习
    发表于 08-02 10:39

    神经网络深度学习》讲义

    神经网络深度学习》讲义
    发表于 07-20 08:58 0次下载

    卷积神经网络深度神经网络的优缺点 卷积神经网络深度神经网络的区别

    深度神经网络是一种基于神经网络的机器学习算法,其主要特点是由多层神经元构成,可以根据数据自动调整神经
    发表于 08-21 17:07 4120次阅读

    深度学习与卷积神经网络的应用

    随着人工智能技术的飞速发展,深度学习和卷积神经网络(Convolutional Neural Network, CNN)作为其中的重要分支,已经在多个领域取得了显著的应用成果。从图像识
    的头像 发表于 07-02 18:19 906次阅读