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

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

一、感知器

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

1、外部刺激通过神经末梢,转化为电信号,转导到神经细胞(又叫神经元)。

2、无数神经元构成神经中枢。

3、神经中枢综合各种信号,做出判断。

4、人体根据神经中枢的指令,对外部刺激做出反应。

二、权重和阈值

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

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

天气:权重为8

同伴:权重为4

价格:权重为4

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

如果三个因素都为1,它们乘以权重的总和就是 8 + 4 + 4 = 16。如果天气和价格因素为1,同伴因素为0,总和就变为 8 + 0 + 4 = 12。这时,还需要指定一个阈值(threshold)。如果总和大于阈值,感知器输出1,否则输出0。假定阈值为8,那么 12 > 8,小明决定去参观。阈值的高低代表了意愿的强烈,阈值越低就表示越想去,越高就越不想去。

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

三、决策模型

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

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

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

四、矢量化

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

外部因素 x1、x2、x3 写成矢量 ,简写为 x

权重 w1、w2、w3 也写成矢量 (w1, w2, w3),简写为 w

定义运算 w⋅x = ∑ wx,即 w 和 x 的点运算,等于因素与权重的乘积之和

定义 b 等于负的阈值 b = -threshold

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

五、神经网络的运作过程

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

1、输入和输出

2、权重(w)和阈值(b)

3、多层感知器的结构

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

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

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

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

1、确定输入和输出

2、找到一种或多种算法,可以从输入得到输出

3、找到一组已知答案的数据集,用来训练模型,估算w和b

4、一旦新的数据产生,输入模型,就可以得到结果,同时对w和b进行校正

六、输出连续性

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

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

z = wx + b

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

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

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

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

现在是这样:

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

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

php 神经网络,神经网络算法基础入门相关推荐

  1. 【神经网络】零基础入门神经网络:从原理、主要类型到行业应用

    原作 Jay Shah Root 编译自 Jay Shah寄几的博客 量子位 出品 | 公众号 QbitAI 最近,神经网络这个词特别火,吸引不少眼球.但是神经网络是个啥?有啥用? 这篇文章和大家唠唠 ...

  2. 算法基础入门——数论(数学知识基础)

    文章目录 一.质数 分解质因数 题目 代码 筛选质数 埃氏筛法 题目 代码 线性筛法 二.约数 约数个数 试除法求约数个数(时间复杂度:O(sqrt(N)) ) 未完待续 一.质数 质数即因子只有1和 ...

  3. 算法基础入门—求圆面积

    求圆面积 圆面积求法很简单:πr2 但对于新手须注意的是对于π的值不能取简单的3.1415926.例如.这题要求保留小数位后7位,π的值必须能保证面积后8位都是精确的值.π可以取PI=3.141592 ...

  4. 零基础入门深度学习(3) - 神经网络和反向传播算法

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  5. 零基础入门深度学习(5) - 循环神经网络

    往期回顾 在前面的文章系列文章中,我们介绍了全连接神经网络和卷积神经网络,以及它们的训练和使用.他们都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的.但是,某些任务需要能够更好的 ...

  6. 零基础入门深度学习(7) - 递归神经网络

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  7. 零基础入门深度学习(4) - 卷积神经网络

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  8. 长短时记忆神经网络python代码_零基础入门深度学习(6) - 长短时记忆网络(LSTM)

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  9. 零基础入门深度学习(5) - 循环神经网络【转】

    本文转载自:https://zybuluo.com/hanbingtao/note/541458 在前面的文章系列文章中,我们介绍了全连接神经网络和卷积神经网络,以及它们的训练和使用.他们都只能单独的 ...

最新文章

  1. 51nod 1287: 加农炮 好题啊好题
  2. 解析BW:数据源提取数据的原理
  3. mysql数据库入门教程(3):图形化用户界面SQLyog 的安装和介绍
  4. OpenGL Tessellated Triangle镶嵌三角形的实例
  5. 暴雪应该从《争霸艾泽拉斯》中吸取什么教训?
  6. 每日程序C语言2-判断某日期是这一年的第几天
  7. Self Introduction
  8. qt中设置QCheckBox的文本与勾选框之间的距离
  9. [Spring+SpringMVC+Mybatis]框架学习笔记(四):Spring实现AOP
  10. Android成长日记-Activity
  11. AVL树原理理解:旋转与平衡
  12. spss数据调整后重新计算
  13. assert函数_类成员函数指针在成员函数内部的调用
  14. 知乎--LSTM(挺全的)
  15. 2018.10.31 NOIP模拟 一串数字(数论+贪心)
  16. PHP拼团人数不能超过,怎么解决拼团、抽奖难以凑齐人数这个大问题?
  17. psp测试电池软件,PSP 电池使用时间测试
  18. 关于DVD的VOB文件的认识
  19. 5.入律古风、排律与柏梁体
  20. 安装和使用IBM PowerVP和IBM AIX

热门文章

  1. 如果生活中有什么结解不开,那就打个蝴蝶结吧
  2. linux cadaver 命令,备份Linux系统的数据到坚果云
  3. 花花世界迷人眼,没有实力别赛脸,做Python实力派(万字精华,初学者,收藏必备!!!)
  4. 动态规划设计方法详解最长递增子序列
  5. 深度学习的常见模型CNN
  6. 常用的数字正则表达式(含小数)
  7. Git用法及常见问题
  8. linux下使用ftp命令匿名登录
  9. ASCII转十六进制小工具
  10. python定义一个字符串数组赋值_Python ctypes:传递一个字符串数组