(转)简单神经网络(权值阈值训练)

本文转自:

神经网络入门 - 阮一峰的网络日志icon-default.png?t=M4ADhttps://www.ruanyifeng.com/blog/2017/07/neural-network.html


眼下最热门的技术,绝对是人工智能。

人工智能的底层模型是"神经网络"(neural network)。许多复杂的应用(比如模式识别、自动控制)和高级模型(比如深度学习)都基于它。学习人工智能,一定是从它开始。

什么是神经网络呢?网上似乎缺乏通俗的解释。

前两天,我读到 Michael Nielsen 的开源教材《神经网络与深度学习》(Neural Networks and Deep Learning),意外发现里面的解释非常好懂。下面,我就按照这本书,介绍什么是神经网络。

这里我要感谢优达学城的赞助,本文结尾有他们的《前端开发(进阶)》课程的消息,欢迎关注。


一、感知器

历史上,科学家一直希望模拟人的大脑,造出可以思考的机器。人为什么能够思考?科学家发现,原因在于人体的神经网络。

 

  1. 外部刺激通过神经末梢,转化为电信号,转导到神经细胞(又叫神经元)。
  2. 无数神经元构成神经中枢。
  3. 神经中枢综合各种信号,做出判断。
  4. 人体根据神经中枢的指令,对外部刺激做出反应。

既然思考的基础是神经元,如果能够"人造神经元"(artificial neuron),就能组成人工神经网络,模拟思考。上个世纪六十年代,提出了最早的"人造神经元"模型,叫做"感知器"(perceptron),直到今天还在用。

 上图的圆圈就代表一个感知器。它接受多个输入(x1,x2,x3...),产生一个输出(output),好比神经末梢感受各种外部环境的变化,最后产生电信号。

为了简化模型,我们约定每种输入只有两种可能:1 或 0。如果所有输入都是1,表示各种条件都成立,输出就是1;如果所有输入都是0,表示条件都不成立,输出就是0。


二、感知器的例子

下面来看一个例子。城里正在举办一年一度的游戏动漫展览,小明拿不定主意,周末要不要去参观。

 他决定考虑三个因素。

  1. 天气:周末是否晴天?
  2. 同伴:能否找到人一起去?
  3. 价格:门票是否可承受?

这就构成一个感知器。上面三个因素就是外部输入,最后的决定就是感知器的输出。如果三个因素都是 Yes(使用1表示),输出就是1(去参观);如果都是 No(使用0表示),输出就是0(不去参观)。


三、权重和阈值

看到这里,你肯定会问:如果某些因素成立,另一些因素不成立,输出是什么?比如,周末是好天气,门票也不贵,但是小明找不到同伴,他还要不要去参观呢?

现实中,各种因素很少具有同等重要性:某些因素是决定性因素,另一些因素是次要因素。因此,可以给这些因素指定权重(weight),代表它们不同的重要性。

  • 天气:权重为8
  • 同伴:权重为4
  • 价格:权重为4

上面的权重表示,天气是决定性因素,同伴和价格都是次要因素。

如果三个因素都为1,它们乘以权重的总和就是 8 + 4 + 4 = 16。如果天气和价格因素为1,同伴因素为0,总和就变为 8 + 0 + 4 = 12。

这时,还需要指定一个阈值(threshold)。如果总和大于阈值,感知器输出1,否则输出0。假定阈值为8,那么 12 > 8,小明决定去参观。阈值的高低代表了意愿的强烈,阈值越低就表示越想去,越高就越不想去。

上面的决策过程,使用数学表达如下。

 

上面公式中,x表示各种外部因素,w表示对应的权重。


四、决策模型

单个的感知器构成了一个简单的决策模型,已经可以拿来用了。真实世界中,实际的决策模型则要复杂得多,是由多个感知器组成的多层网络。

上图中,底层感知器接收外部输入,做出判断以后,再发出信号,作为上层感知器的输入,直至得到最后的结果。(注意:感知器的输出依然只有一个,但是可以发送给多个目标。)

这张图里,信号都是单向的,即下层感知器的输出总是上层感知器的输入。现实中,有可能发生循环传递,即 A 传给 B,B 传给 C,C 又传给 A,这称为"递归神经网络"(recurrent neural network),本文不涉及。

 

五、矢量化

为了方便后面的讨论,需要对上面的模型进行一些数学处理。

  • 外部因素 x1x2x3 写成矢量 <x1, x2, x3>,简写为 x
  • 权重 w1w2w3 也写成矢量 (w1, w2, w3),简写为 w
  • 定义运算 w⋅x = ∑ wx,即 w 和 x 的点运算,等于因素与权重的乘积之和
  • 定义 b 等于负的阈值 b = -threshold

感知器模型就变成了下面这样。

 

六、神经网络的运作过程

一个神经网络的搭建,需要满足三个条件。

  • 输入和输出
  • 权重(w)和阈值(b
  • 多层感知器的结构

也就是说,需要事先画出上面出现的那张图。

其中,最困难的部分就是确定权重(w)和阈值(b。目前为止,这两个值都是主观给出的,但现实中很难估计它们的值,必需有一种方法,可以找出答案。

【模型训练】

这种方法就是试错法。其他参数都不变,w(或b)的微小变动,记作Δw(或Δb),然后观察输出有什么变化。不断重复这个过程,直至得到对应最精确输出的那组wb,就是我们要的值。这个过程称为模型的训练

 

因此,神经网络的运作过程如下。

  1. 确定输入和输出
  2. 找到一种或多种算法,可以从输入得到输出
  3. 找到一组已知答案的数据集,用来训练模型,估算wb
  4. 一旦新的数据产生,输入模型,就可以得到结果,同时对wb进行校正

可以看到,整个过程需要海量计算。所以,神经网络直到最近这几年才有实用价值,而且一般的 CPU 还不行,要使用专门为机器学习定制的 GPU 来计算。

 


七、神经网络的例子

下面通过车牌自动识别的例子,来解释神经网络。

所谓"车牌自动识别",就是高速公路的探头拍下车牌照片,计算机识别出照片里的数字。

这个例子里面,车牌照片就是输入,车牌号码就是输出,照片的清晰度可以设置权重(w)。然后,找到一种或多种图像比对算法,作为感知器。算法的得到结果是一个概率,比如75%的概率可以确定是数字1。这就需要设置一个阈值(b)(比如85%的可信度),低于这个门槛结果就无效。

一组已经识别好的车牌照片,作为训练集数据,输入模型。不断调整各种参数,直至找到正确率最高的参数组合。以后拿到新照片,就可以直接给出结果了。


八、输出的连续性

上面的模型有一个问题没有解决,按照假设,输出只有两种结果:0和1。但是,模型要求wb的微小变化,会引发输出的变化。如果只输出01,未免也太不敏感了,无法保证训练的正确性,因此必须将"输出"改造成一个连续性函数

这就需要进行一点简单的数学改造。

首先,将感知器的计算结果 wx + b记为z


z = wx + b

然后,计算下面的式子,将结果记为σ(z)


σ(z) = 1 / (1 + e^(-z))

这是因为如果z趋向正无穷z → +∞(表示感知器强烈匹配),那么σ(z) → 1;如果z趋向负无穷z → -∞(表示感知器强烈不匹配),那么σ(z) → 0。也就是说,只要使用σ(z)当作输出结果,那么输出就会变成一个连续性函数。

原来的输出曲线是下面这样。

 

现在变成了这样。

 

实际上,还可以证明Δσ满足下面的公式。

ΔσΔwΔb之间是线性关系,变化率是偏导数。这就有利于精确推算出wb的值了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle入门(五A)之conn命令

一、connect命令将给定的用户名连接到Oracle数据库。当你运行一个连接命令、站点配置文件、Galgn.SQL和用户配置文件&#xff0c;按顺序处理Login .SQL。连接不重发如果初始连接不成功&#xff0c;请使用用户名或密码。语法&#xff1a; conn[ect] [{登录串|/|代理串} [AS…

2-操作系统启动

【README】 本文内容总结自 《操作系统-哈工大李治军老师》&#xff0c;内容非常棒&#xff0c;墙裂推荐&#xff1b; 【1】概述 1&#xff09;问题&#xff1a;操作系统启动时&#xff0c;它应该做什么事情&#xff1f; 计算机启动时&#xff0c;需要把存储在磁盘上的操作系…

Asp.net 面向接口可扩展框架之类型转化基础服务

新框架正在逐步完善,可喜可贺的是基础服务部分初具模样了,给大家分享一下 由于基础服务涉及面太广,也没开发完,这篇只介绍其中的类型转化部分,命名为类型转化基础服务,其实就是基础服务模块的类型转化子模块 说到类型转化必须要弄清楚.net的类型,类型都不清楚何来类型转化 1、P…

asset文件夹路径 unity_我们来捣鼓一下Unity的平台跳跃Microgame

作者&#xff1a;Truly大家好。Platformer Microgame是Unity官方的一个2D平台跳跃游戏项目模板&#xff0c;小伙伴们可以在这个模板的基础上修改或者制作自己的游戏。下边我们就来简单试玩下这个工程吧~一、资源导入写文章时&#xff0c;该资源暂时还不支持Unity 2019.x版本&am…

Oracle入门(五)之基本命令操作

一、show &#xff08;1&#xff09;查询Oracle系统变量值 语法&#xff1a;show 变量名 show all --查看所有68个系统变量值 show user --显示当前连接用户 注&#xff1a;Oracle的68个系统变量的key和默认value &#xff08;2&#xff09;查询oracle数据库当前的参数值 …

Linux工程师新法宝:在Visual Studio上用C++ 写Linux

如今我们正在开发一个新的插件&#xff0c;一个能够让开发者在 Visual Studio (以下简称 VS ) 上建构能够在 Linux 上运行 C 程序的套件。开发者可以借由这个插件将 C 程序移转到 Linux 服务器、PC 以及移动设备上&#xff0c;也同时可以借由这个插件将这些机器连结至你的 VS 上…

互联网+大赛作品_“颂中国力量 绘美好梦想”全市中小学生互联网+书画大赛作品展示(五)...

主办平顶山市教育体育局承办平顶山市教育体育局关心下一代工作委员会平顶山教育电视台教育部中国书画等级考试平顶山市招生管理办公室协办平顶山市书法家协会平顶山市美术家协会一比赛宗旨作品以中国战胜疫情为背景&#xff0c;以书法绘画为表现形式&#xff0c;真实记录全市中…

(转)Spring Boot启动过程 和 Bean初始化过程中的拓展接口详解

转自&#xff1a; Spring Boot启动过程 和 Bean初始化过程中的拓展接口详解_guyue35的博客-CSDN博客Spring Boot启动过程和 Bean初始化过程中的拓展接口详解1.背景 Spring的核心思想就是容器&#xff0c;当容器refresh的时候&#xff0c;外部看上去风平浪静&#xff0c;其实内…

Oracle入门(七B)之表空间删除数据文件未删除

转载自 oracle表空间删除数据文件未删除清理老旧数据的时候,不太熟悉操作,直接把表空间删了,未删除数据文件, HIS20170927此表空间已删除但数据文件还在,这时新创建一个表空间直接指定到这个数据文件上. create tablespace HIS20170927 datafile /oracle/oradata/****/HIS20170…

玩玩Xamarin Evolve 2016带来的新特性(一)-iOS Simulator(for Windows)

编者语&#xff1a; Xamarin Evolve 2016给不少.NET社群的朋友带来了强心剂&#xff0c;做.NET还是有前途啊&#xff0c;特别在微软开源的策略上。我会在五一假期和大家谈谈Xamarin中大家比较关注的iOS Windows模拟器&#xff0c;Xamarin Forms Previewer,还有Xamarin WorkBook…

python实现倒n字形排列_Leetcode问题库——Z形变换(Python),补充X形变换,字形

Z字形变换题目将一个给定字符串根据给定的行数&#xff0c;以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时&#xff0c;排列如下&#xff1a;之后&#xff0c;你的输出需要从左往右逐行读取&#xff0c;产生出一个新的字符串&#x…

蓝绿发布,灰度发布及滚动发布

【README】 本文转自&#xff1a;理解蓝绿发布、灰度发布和滚动发布_Jitwxs的博客-CSDN博客_蓝绿发布和灰度发布的区别目前绝大多数公司的业务系统都是集群化部署&#xff0c;那么在新版本上线时&#xff0c;保证平滑稳定&#xff0c;尽量减少对线上用户的影响&#xff0c;就显…

Oracle入门(七)之表空间

表空间表空间是数据库的逻辑划分&#xff0c;一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表&#xff0c; 所以称作表空间。 Oracle数据库中至少存在一个表空间&#xff0c;即SYSTEM的表空间。 &#xff08;1&#xff09;创建表空…

让我们Core在一起:ASP.NET Core amp; .NET Core

Microsoft .NET 自 2002 年发行 v1.0 以来&#xff0c;已经过了近 14 个年头&#xff0c;在这 14 年里面&#xff0c;.NET 日渐成熟并成为 Microsoft 的重要开发平台之一&#xff0c;只要是在 Windows 平台上的相关应用&#xff0c;几乎都可以使用 .NET 以及所属的 C# 及 VB 语…

python菱形画法解释_用Python画棱形

定义一个函数画棱形def diamond(height):"""Return a string resembling a diamond of specified height (measured in lines).height must be an even integer."""L[]lines/bs\\for i in range(1,int(height/21)):aline.rjust(i,s).ljust(i*2,b…

3.操作系统接口与系统调用

【README】 本文内容总结自 《操作系统-哈工大李治军老师》&#xff0c;内容非常棒&#xff0c;墙裂推荐&#xff1b; 【1】操作系统接口 0&#xff09;用户使用计算机3种方式&#xff1a; 命令行&#xff1b; 命令行执行 hello world图形界面&#xff1b;如计算机磁盘浏览器…

Oracle入门(十二A)之数据类型

Oracle数据类型 &#xff08;1&#xff09;char&#xff08;2&#xff09;varchar2&#xff08;3&#xff09;Number&#xff08;4&#xff09;Date&#xff08;5&#xff09;Blob、Clob、Nclob

在Linux以及Mac OS X启用F#

随着.NET Core的推进&#xff0c;如今我们在Linux和Mac OS X平台上也可以和原先Windows平台之下一样运行F#程序。Microsoft的F#项目经理David Stephens先生在Build 2016大会上向大家介绍了如何在Linux以及Mac OS X启用F#。 第一步需要安装.NET Core工具。这一步对于C#和F#来说是…

flask执行python脚本_如何在flask后端运行python脚本?

我有一个小瓶子应用程序&#xff0c;它接受用户输入并返回一些文本。在这里&#xff0c;用户输入被输入到另一个python脚本&#xff0c;比如temp.py&#xff0c;这个temp.py将返回一个应该返回给用户的值。例如&#xff1a;烧瓶.pyfrom flask import Flask, render_template, r…

4.操作系统历史

【README】 本文内容总结自 B站 《操作系统-哈工大李治军老师》&#xff0c;内容非常棒&#xff0c;墙裂推荐&#xff1b; 【1】IBM7094 批处理操作系统&#xff1a; 一个job 一个job的顺序执行&#xff1b; 【2】 IBM OS360 1&#xff09; 多道程序&#xff1a; 程序1 程…