把感知机组装在一起就是神经网络了?
作者 | 梁唐 责编 | 张文
头图 | CSDN 下载自视觉中国
来源 | TechFlow(ID:techflow2019)
神经网络与感知机的不同
这张图是一个多层感知机的图,乍一看没什么问题,但是细想会觉得有点奇怪,好像我们印象里看到的神经网络的图片也是这样的,既然如此,那么它们之间有什么区别呢?
表面上最明显的区别就是名字不同,这是一张神经网络的图片。
我们发现同样是三层,但是它每一层的名字分别是输入层、中间层(隐藏层)和输出层。我们一般把输入层和输出层单独命名,中间的若干层都叫做隐藏层或者是中间层。当然像是感知机一样,以数字来命名层数也是可以的,比如下图当中的输入层叫做第0层,中间层叫做第1层,最后输出层叫做第2层。
我们一般不把输出层看作是有效的神经网络,所以下图的网络被称为二层神经网络,而不是三层神经网络。
除了名字的叫法不同之外,还有一个最关键的区别就是激活函数,为了说明白这点,我们先来看看神经网络当中的信号传递。
信号传递
下图是一张我随便找来的神经网络图,我们可以看到输入的第一个节点被置为了1。这样做是为了方便引入偏移量,只是我们一般情况下画图的时候,不会特意把偏移量画出来。我们以下图为例子来看下神经网络当中信号的传递方式。
我们以为例,可以来试着写出的表达式,它一共有三个input,分别是1, , ,然后我们也可以看到每一个input对应的权重,所以最后可以写成:
到这里还没有结束。神经网络当中每一层都会有对应的激活函数。一般情况下同一层网络当中的激活函数相同,我们把它叫做h,所以最终这个节点的输出并不是刚刚得到的,而是。
激活函数我们已经比较熟悉了,之前介绍过很多次,常用的大概有以下几种:Relu、Sigmoid、tanh、softmax,以及一些衍生出的变种。
一般情况下,在输出层之前我们通常使用Relu,如果模型是一个分类模型,我们会在最后使用Sigmoid或者是softmax,如果是回归模型则不使用任何激活函数。
Sigmoid我们已经很熟悉了,如果我们把LR模型也看成是一个单层的神经网络的话,那么Sigmoid就是它的激活函数。Sigmoid应用在二分类场景当中单个的输出节点上,输出的值如果大于0.5表示为真,否则为假。在一些概率预估场景当中,也可以认为输出值就代表了事件发生的概率。
与之对应的是softmax函数,它应用在多分类问题当中,它应用的节点数量不是1个,而是k个。这里的k表示多分类场景当中的类别数量。我们以k=3举例,看下图:
在图中一共有三个节点,对于每一个节点来说,它的公式可以写成:
其实和Sigmoid的计算方式是一样的,只不过最后计算了一个权重。最后我们会在这k个节点当中选择最大的作为最终的分类结果。
代码实现
最后,我们来试着写一下神经网络的代码,由于现在我们还没有介绍神经网络的训练方法,所以我们只能实现它预测的部分。等我们介绍完了反向传播算法之后,再来补上模型训练的过程。
如果不考虑反向传播的话,其实整个算法的代码非常简单,只要熟悉Python语法的同学都能看懂。
import numpy as npdef relu(x):return np.where(x > 0, x, 0)def sigmoid(x):return 1 / (1 + np.exp(-x))class NeuralNetwork():def __init__(self):self.params = {}self.params['W1'] = np.random.rand(2, 3)self.params['b1'] = np.random.rand(1, 3)self.params['W2'] = np.random.rand(3, 2)self.params['b2'] = np.random.rand(1, 2)self.params['W3'] = np.random.rand(2, 1)self.params['b3'] = np.random.rand(1, 1)def forward(self, x):a1 = np.dot(x, self.params['W1']) + self.params['b1']z1 = relu(a1)a2 = np.dot(z1, self.params['W2']) + self.params['b2']z2 = relu(a2)a3 = np.dot(z2, self.params['W3']) + self.params['b3']return np.where(sigmoid(a3) > 0.5, 1, 0)if __name__ == "__main__":nn = NeuralNetwork()print(nn.forward(np.array([3, 2])))
更多精彩推荐☞常年“盘踞”数据库前五的 MongoDB,在中国有哪些新动向?☞开发者实测 M1 芯片报告:除了大型应用程序启动慢点,整体性能优秀☞她们,在字节跳动写代码☞“跟风离职后,找不到工作了!”:好多同事离职,这家公司还值不值得待?☞中招!330 万台老年机被植木马,背后黑幕细思极恐☞Salesforce 为什么要收购 Slack?☞中台“不火”了,企业数智转型如何破圈?
点分享点点赞点在看
把感知机组装在一起就是神经网络了?相关推荐
- 深度学习(5)感知机(神经元)与神经网络
目录 感知机(神经元) 一个感知机: 两个感知机: 三个感知机: 神经网络 例(神经网络) 感知机(神经元) 感知机是集语音.文字.手语.人脸.表情.唇读.头势.体势等多通道为一体的,并对这些通道的信 ...
- 深度学习框架 TensorFlow:张量、自动求导机制、tf.keras模块(Model、layers、losses、optimizer、metrics)、多层感知机(即多层全连接神经网络 MLP)
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 安装 TensorFlow2.CUDA10.cuDNN7.6. ...
- 干货丨从感知机到深度神经网络,带你入坑深度学习
作者:Adi Chris 机器之心编译 参与:朱乾树.刘晓坤 机器学习工程师 Adi Chris 最近学习完吴恩达在 Coursera 上的最新课程后,决定写篇博客来记录下自己对这一领域的理解.他建议 ...
- 什么是通过人工神经网络,感知机是什么神经网络
1.clementine的多层感知器就是BP神经网络吗 BP神经网络,指的是用了"BP算法"进行训练的"多层感知器模型". 多层感知器(MLP,Multilay ...
- 前馈神经网络(多层感知机)基础
前馈神经网络(多层感知机)基础 1. 神经网络介绍 1.1 神经网络的生物学背景 1.2 人工神经元与感知机 1.3 常用激活函数 1.3.1 线性函数(Linear Function) 1.3.2 ...
- 直观理解神经网络和感知机
大家都知道神经网络的基本单元是感知机. 那么感知机为什么能够组合成神经网络呢?感知机和神经网络又是如何工作的呢? 这就得先来谈谈感知机是什么. 感知机 如图这种形式就叫感知机,它是由两部分组成,一部分 ...
- 神经网络(Neural Network)
1 引言 机器学习(Machine Learning)有很多经典的算法,其中基于深度神经网络的深度学习算法目前最受追捧,主要是因为其因为击败李世石的阿尔法狗所用到的算法实际上就是基于神经网络的深度学习 ...
- BP神经网络的线性本质的理解和剖析-卷积小白的随机世界
https://www.toutiao.com/a6674387399058915852/ 在完成上篇(第三十一篇)感知机的理解文章后,本想开始梳理SVM(支持向量机),不想感知机也是深度学习神经网络 ...
- 深度学习概述:从感知机到深度网络(找到一篇大牛的文章快围观)
https://www.toutiao.com/i6652554938519912968/ 2019-01-31 15:10:48 前言 别说我不宠粉,分享一篇大佬的文章,没办法书读得少不知道怎么去形 ...
最新文章
- 继往开来!目标检测二十年技术综述
- 《HBase企业应用开发实战》—— 第3章 数 据 模 型
- 学习LOWORD、 HIWORD、LOBYTE、HIBYTE
- ST函数(ST表)RMQ O(1)查询 离线
- 如何在win7(xp)home version下安装 rose 32 bit
- foxmail 怎么把邮件格式默认为html_Python SMTP发送邮件-smtplib模块
- spring boot 入门_玩转springboot2.x之快速入门开山篇
- Hacker Plus:Facebook 推出漏洞奖励 “忠诚计划”
- linux下使用source /etc/profile保存配置后,新的环境变量只能在一个终端里面有效...
- 学习vim: 配置python相关插件
- NLTK学习笔记(六):利用机器学习进行文本分类
- Linux环境下配置虚拟ip,方法1:新增多个子网卡,每个子网卡有独立的配置文件
- python一定要有主函数_python的主函数问题
- Entrez Direct
- GD32库中常用的位操作REGIDX_BIT(regidx, bitpos)
- [iuud8]ios不同版本下推送本地通知
- [转]织梦标签全攻略
- 大二〕一直在寻找 生而为人的意义(转载)
- 汇编语言(Assembly Language)简介
- C#--color颜色对照表
热门文章
- Mysql和Oracle语句区别
- 《算法问题实战策略》-chaper21-树的实现和遍历
- hduoj-----(2896)病毒侵袭(ac自动机)
- java 解码 encodeuri_encodeURIComponent编码后java后台的解码
- python中的append()有什么功能_在python中append()函数能做什么
- 力扣--260只出现一次的数字I-III
- linux usb设备名 ks,在Linux系统里识别USB设备名字的4种方法
- 【图像处理】MATLAB:图像噪声
- 关于拷贝常规数组、std::array和std::vector速度的一些测试
- Flutter代码锦囊---集中管理路由与导航