NO.1:自学tensorflow之路------神经网络背景知识
引言
从本周,我将开始tensorflow的学习。手头只有一本《tensorflow:实战Google深度学习框架》,这本书对于tensorflow的入门有一定帮助。tensorflow中文社区中的翻译的谷歌官方教程十分详细,是自学tensorflow的好帮手,当然如果是英文熟手可以直接看谷歌官方给出的原版教程(博主英语是靠谷歌翻译和百度翻译救活的)。
本篇博客主要讲述机器学习的发展过程,以及BP神经网络的主要内容。不涉及tensorflow的编程。具体BP神经网络tensorflow的实现将在下一篇博文中展示。
正文
机器学习背景
在20世纪以来,任何一门技术的发展都离不开学科间的交融,计算机技术的发展,以及才华横溢的工作者的创新。机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
人类的大脑十分神奇,它帮助人们认识,学习这个世界。神经网络不仅是生物学习记忆的一种结构,同样也是机器学习的基础。将人类的单个神经元传递处理信息的过程简化,并用数学表示,就是神经网络的来源。


图1.生物神经元(上)和神经网络神经元(下)
早在1958年,Rosenblatt就提出了名为感知机的线性分类模型。但是后来研究人员发现它对非线性问题难以处理,并且当时计算机计算能力低下,难以完成复杂的计算过程。
神经网络的第一次大的革新是在1974年,Paul Werbos提出了反向传播算法,为神经网络的训练提供了良好的方法。让神经网络出现在各种应用场景中,也逐渐出现了多种多样的神经网络结构。
1992年,Vapnik等人提出了支持向量机,支持向量机方法是建立在统计学习理论的VC维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折中,以求获得最好的泛化能力。
从此,一场支持向量机与神经网络的较量就展开了。并且神经网络在后来的较量中逐渐败下阵来。究其原因主要是由于当时计算机的计算能力依然难以满足多层神经网络训练,计算的要求,同时神经网络还存在着梯度消失的现象,使得多层神经网络难以实现。
在2006年,深度学习(Deep Learning)算法的提出是神经网络的第二次大的革新。谷歌AlphaGo在围棋中战胜李世石,点燃了深度学习的一个新的热潮。所以本人就在这个浪头上开始跟风了,希望能在明年毕业之前完成毕设论文。
BP神经网络
一个3层的BP神经网络,是学习神经网络的基础。虽然如今很多工具都有现成的BP神经网络工具,但是如果不能深入了解神经网络内部实际的运作,也将很难对其进行创新。这里将介绍最简单的BP神经网络的正向传播,反向传播过程。
正向传播
一般的BP神经网络是由输入层、隐含层和输出层三层神经网络组成。输入层神经元的个数等于输入变量的个数,输出层神经元的个数等于输出变量的个数,隐含层神经元的个数一般通过经验法选取。变量从输入层传播到隐藏层,其计算过程如下所示:

其中, xi为输入层神经元i的输入变量,vij输入层神经元i到隐含层神经元j之间突触的权值,θj为隐含层神经元j的偏置,f()为隐含层激活函数,hj为隐含层神经元的输出。
从输入层到隐藏层的计算过程如下所示:

其中,g()为输出层激活函数,yk为输出层神经元k的输出。
激活函数为神经网络引入非线性因素,让神经网络可以解决线性模型不能解决的问题。常用的又sigmoid函数与tanh函数,但这两种都存在梯度消失的问题。Re-LU函数可以解决梯度消失的问题,目前被大量使用。这样就讲完了正向传播的过程。
反向传播
正向传递神经网络,可以得到神经网络输出,随后就可以得到神经网络的误差。神经网络反向传播误差,就可以得到神经元参数应该向最优值运动的方向。通过多次的循环学习,就可以逐渐逼近最优的神经网络参数,完成神经网络的训练。
输出误差函数为:

隐藏层误差函数为:

其中,ok为系统实际输出。将误差进行反向传递后,利用梯度下降法,分别让误差对应各层的权值和阈值求偏导数,以达到最优。其表达式如下所示:

这样就得到了误差反向传播的公式,通过设定合适的batch,就可以进行神经网络的训练了。
谷歌使用tensorflow建立了一个游乐场分类网页,可以通过调节神经元个数,层数,激活函数以及训练步长来快速看出分类效果。十分有趣。游乐场例子:http://playground.tensorflow.org
后记
由于平日学习用Matlab居多,而学习深度学习,tensorflow又是其目前最好用的工具之一。希望一切努力不会付诸流水,与正在学习的朱军共勉。
NO.1:自学tensorflow之路------神经网络背景知识的更多相关文章
- NO.3:自学tensorflow之路------MNIST识别,神经网络拓展
引言 最近自学GRU神经网络,感觉真的不简单.为了能够快速跑完程序,给我的渣渣笔记本(GT650M)也安装了一个GPU版的tensorflow.顺便也更新了版本到了tensorflow-gpu 1.7 ...
- NO.2:自学tensorflow之路------BP神经网络编程
引言 在上一篇博客中,介绍了各种Python的第三方库的安装,本周将要使用Tensorflow完成第一个神经网络,BP神经网络的编写.由于之前已经介绍过了BP神经网络的内部结构,本文将直接介绍Tens ...
- NO.3:自学python之路------集合、文件操作、函数
引言 本来计划每周完成一篇Python的自学博客,由于上一篇到这一篇遇到了过年.开学等杂事,导致托更到现在.现在又是一个新的学期,春天也越来越近了(冷到感冒).好了,闲话就说这么多.开始本周的自学Py ...
- 5000字长文,kurryluo 的自学编程之路
我是程序员.大众口中非科班的那种,带着高中时期对二进制的恐惧,在大学参加科研比赛后保研,再到和校友一起创业,现在在某大型互联网公司做前端开发,一路走来都是靠自己学习. 前端框架 VUE 的作者尤大说过 ...
- 自学Zabbix之路
自学Zabbix之路[第一回]:初识Zabbix 1.1 自学Zabbix1.1-简介 1.2 自学Zabbix1.2-zabbix特性 1.3 自学Zabbix1.3-zabbix进程 自学Zabb ...
- 自学Python之路
自学Python之路[第一回]:初识Python 1.1 自学Python1.1-简介 1.2 自学Python1.2-环境的搭建:Pycharm及python安装详细教程 1.3 ...
- 15.5 自学Zabbix之路15.5 Zabbix数据库表结构简单解析-其他 表
点击返回:自学Zabbix之路 自学Zabbix之路15.5 Zabbix数据库表结构简单解析-其他 表 1. Actions表 actions表记录了当触发器触发时,需要采用的动作. 2.Aler ...
- 自学Aruba之路
自学Aruba之路[第一回]:体系结构 1.1 自学Aruba1.1-Aruba体系结构-产品线 1.2 自学Aruba1.2-WLAN一些基本常识 1.3 自学Aruba1.3-W ...
- 使用TensorFlow的卷积神经网络识别自己的单个手写数字,填坑总结
折腾了几天,爬了大大小小若干的坑,特记录如下.代码在最后面. 环境: Python3.6.4 + TensorFlow 1.5.1 + Win7 64位 + I5 3570 CPU 方法: 先用MNI ...
随机推荐
- 在Eclipse中执行、配置Hadoop
版权全部: zhe-jiang.he@hp.com 严禁转载! 1.安装插件 准备程序: eclipse-3.3.2(这个版本号的插件仅仅能用这个版本号的eclipse) hadoop-0.20.2 ...
- VMware虚拟机安装Centos7图文教程
CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程 ...
- git 设置只输入一次用户名和密码
https方式每次都要输入密码,非常不爽 按照如下设置可只输入一次 记住密码(默认15分钟): git config --global credential.helper cache 自己定义时间(一 ...
- Linux下Tomcat性能优化--文件句柄数增大
今天在对项目进行性能压力测试时,设置并发量为1000,发现Tomcat控制报错: java.IOException:打开的文件过多 经搜索,发现是由于Linux默认设置的句柄数为1024,当并发量过大 ...
- 以某课网日志分析为例 进入大数据 Spark SQL 的世界
第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目中涉及的Hadoop. ...
- ACM1009:FatMouse' Trade
Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ...
- 回文词 (Palindromes,Uva401)
例题 3-3 回文词 (Palindromes,Uva401) 输入一个字符中,判断它是否为回文串以及镜像串.输入字符串保证不含数字0.所谓回文串,就是反转以后和原串相同,如abba和madam.所有 ...
- 数据结构与算法之数组(1)——in dart
import 'dart:math' show Random; List<int> _array; final _rnd = Random(); final _capacity = 100 ...
- 对SSL一个疑问的新理解
看了很多关于Https/SSL的介绍,关于数字证书部分,我一直有个疑问:如果数字证书文件被别人拿到,那是不是就可以进行通讯了呢?如果这样,那整个安全机制就完全失去作用了.从开发的角度,我拿到别人的数字 ...
- Oracle入门第四天(下)——约束
一.概述 1.分类 表级约束主要分为以下几种: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK 2.注意事项 如果不指定约束名 ,Oracle server ...