TensorFlow搭建神经网络(1):机器学习与神经网络

本系列是笔者在学习用TensorFlow搭建神经网络过程中,对网上混杂的博客教程做的整理以及自己学习过程中的心得感悟和一些代码实践,希望对大家有所帮助。
 
 

最开始的引入——

TensorFlow是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库。(摘自百度百科)
 
这个定义涉及到了很多概念。简言之,TensorFlow是一个工具,一个框架,那么在 使用工具之前,我们应该了解这个工具是为什么服务的。显然TensorFlow的作用是实现机器学习的算法,用来搭建神经网络。
 
所以最开始的目标,是要理清楚几个这经常捆绑在一起的概念代表什么。
也就是大家喜欢提到的人工智能,机器学习,深度学习,神经网络这些东西。
 
首先看几个场景: 输入一段语音,会输出一个文本(语音识别); 输入一段英文,会输出一段中文(自动翻译); 输入一段文本,会输出一段音频(语音输出)。
那么再复杂一些,我们需要让计算机鉴定一个未知的古董有什么成分。我们输入了颜色,硬度,密度,质量等各种参数,然后计算机测定出了结果,古董中有物质a,物质b,等等。
那么计算机是如何知道的呢?原来我们事先向计算机中输入了大量的实例与数据,计算机拿到了输入的参数之后到系统中去检索去查找,很快地找到了结果。
 
但是要注意 这个例子并不代表机器学习 这个只是计算机参考了我们人告诉他的经验,机械地去对应查找。计算机并没有自主学习的过程。 一旦我们交给他分析的这个古董,从来没有输到系统里过,计算机就不能找到结果,从而分析不出古董的成分。
 
这就好像一个只会死做题的学生,遇到一道没做过的题目就不会做了。
 
那怎么样算是机器学习呢? 就是 让机器自身去分析数据找规律,并通过找到的规律对新的数据进行处理。 人们 同样把经验数据输入给系统,然后让机器去学习总结,这样即使下次遇到“没做过的题目”也能够举一反三。
 
 

神经网络——

计算机中的神经网络是对人脑中生物神经网络的一种模拟。
 
可以先简单地将神经网络理解为一个接受外界输入,然后通过对这些输入做一系列的处理,最终得到输出的模型。
我们就是通过这样的模型,给机器输入数据,不断地训练机器学习总结规律,最终让机器输出 学习成果 ( 它预测的数据 )。
 
比如 上图中左边的结构
第一步,输入(inputs),输入n个X值
第二步,是对Xi分别乘上一个权重(Weight)Wi
第三步,把所有的Wi*Xi加起来得到总和
第四步,把总和与Threshold(即阈值)进行比较,如果大于阈值就输出一个结果(比如1),小于阈值就输出另一个结果(比如0)。
这就是一个最简单的加权求和神经网络模型。当然这个模型还有另一种表现形式:既然第四步要把总和跟阈值比较大小,那也可以一开始就把阈值加到每个Wi*Xi上去,求(Wi*Xi+Threshold)的和,跟0比较。
这里我们习惯上把Threshold换个名字,叫bias(偏差)。
 
但有些神经网络要比这复杂的多。如 上图右侧的结构 ,在输入层和输出层之间还有很多的处理过程,统称为隐藏层。这里我们可以引申到所谓的深度学习: 深度学习 是属于机器学习中的一种手段, 就是构建有很多个隐藏层的神经网络,辅之以海量的训练数据, 目的是 来提高模型的准确率。
 
多个隐藏层的神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层。
但如果每一层都只通过像刚才那样的(Weight*X+bias)进行线性变换,任意多层的神经网络模型和单层的神经网络模型的表达能力没有任何区别。因为 多个线性计算的过程可以用一个线性计算来表示。
为了避免这样的情况, 在多层神经网络中,上层节点的输出和下层节点的输入之间一般都具有一个函数关系,这个函数称为激活函数,它是非线性的。在神经网络每一层神经元做完线性变换以后,加上一个非线性激励函数对线性变换的结果进行转换,结果显而易见,输出也变成一个非线性的函数了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值