神经网络学习笔记(1)——神经元与激活函数简介

16 篇文章 3 订阅
11 篇文章 0 订阅

作为一个第一次了解神经网络的学生来说,这一块基本上就是搬运的网上各个资源的内容,如果后续在使用和学习的过程中有了新的理解和感悟再来做更深入的补充。
这一块由于才开始接触理论,就还没有运用代码实现出来,后续撸了代码出来后再补上。
最后日常吹3B1B,3B1B永远滴神!

神经网络简单介绍

由于我的规划是先看神经网络(包括概念与梯度下降),再看word2vec、RNN、LSTM,所以现在也不清楚神经网络放在NLP中是怎样输入输出的,我就以3B1B的栗子来简单讲解下神经网络是做什么的。3B1B的链接在这里

3B1B的栗子说的是,输入一个手写数字的图片,通过神经网络,就能识别出是哪个数字。输入的是0-1之间的灰度值(就是说这个像素点是不是亮的,亮的话就代表有东西,不亮的就代表是没东西的),输出的是0-1之间的值,越靠近1证明输入的图片越贴近这个数字,越靠近0表明越不像这个数字。

神经元与激活函数

神经元(neuron)模型如下:
神经元模型

而整个神经网络简单的构建如下:
神经网络
我这里偷了个懒,所以每一层只画了一个神经元,但是实际上的神经网络输入可能有成千上万的数据(即成千上万个神经元),隐藏层每一层也有多个神经元,输出层有可能也有多个输出值,比如上面的3B1B的栗子就有0-9这十个数字即十个神经元。

有了上面两个前提知识后,我们来说一下整个神经元模型的每个部分的含义。

  • 神经元:一个装着0-1之间数字的容器,这个容器的功能可以看做是一个函数,输入是上一层的输出,输出的是0-1之间的值。
  • 输入:由于每个神经元的输出会传入到下一层的每一个神经元中,那么我们单从某个神经元的输入来看,这是个多对一的问题,就是说上一层的每个神经元的输出都会输入到这一个的神经元中。但是由于上一层每个神经元对该神经元的影响不同,所以需要有一个权重w,于是在输入层输入的就是 ∑ i = 1 n w i a i \sum_{i=1}^n w_ia_i i=1nwiai
  • 激活值(avtivation):神经元中装着的数,即上图中的 ∑ i = 1 n w i a i + b \sum_{i=1}^nw_ia_i+b i=1nwiai+b。上一层的激活值决定下一层的激活值(至于为何决定,后面的文章讲梯度下降的时候讲解)。而这个b是一个偏置项(bias),因为神经元中的激活值就是一个加权和到底有多正的打分,但是有的时候我们并不希望那么轻松的点亮这个神经元(就像男生追女生,女生一般都会矫情或者说忸怩一下),于是就加入一个偏置项,保证这个神经元不能随便激发(姐不是那么好追的)。
  • 激活函数:由于神经网络处理的问题许多都是非线性的问题,引入激活函数的作用就是在神经网络中增加非线性[1]。激活函数常见的有sigmoid,tanh,ReLU,这里我们只讨论sigmoid(主要是还没看到其他几个)。sigmoid的函数如下: σ ( x ) = 1 1 + e − x σ(x) = \frac{1}{1+e^{-x}} σ(x)=1+ex1,功能主要是:把非常大的负值变成接近0,把非常大的正值变成接近1,在取值0附近则是平稳增长的。图像如下:
    sigmoid
  • 输出:输出的是被激活函数激活后的内容,展开写为: σ ( w 1 a 1 + w 2 a 2 + . . . + w n a n + b ) σ(w_1a_1 + w_2a_2 + ... + w_na_n + b) σ(w1a1+w2a2+...+wnan+b),其中σ()为激活函数, w 1 a 1 + w 2 a 2 + . . . + w n a n w_1a_1 + w_2a_2 + ... + w_na_n w1a1+w2a2+...+wnan为加权和,b为偏置项,合并写为 σ ( ∑ i = 1 n w i x i + b ) σ(\sum_{i=1}^nw_ix_i + b) σ(i=1nwixi+b)。每个输出的内容,会输出到下一层的每一个神经元。

针对上面的内容,有以下几个注意事项:

  1. 权重和偏置是下一层神经元对上一层神经元的操作,并非上一层对下一层的操作。权重体现的是下一层神经元关注的内容,偏置体现的是加权和得有多大才能让神经元的激活有意义。权重和偏置决定了网络实际会怎么做。
  2. 如果有读者针对上一条注意事项有问题:“为什么只有权重和偏置决定网络实际怎么做,不是还有xi么?”,这是个很简单的问题,因为我们无法确定这个网络会输入什么值,即xi是什么,所以只能调整权重和偏置。
  3. 关于为什么激活函数要选择非线性函数,这是因为如果是线性函数,那么最后的结果就也是线性组合[1-3]
  4. 由于我们上述讨论的是单个神经元,每一层也只有一个神经元,但是如果一层有多个神经元,那么读者们可以思考下,每个神经元都会经历循环,因为上一层神经元的输入有n个,而一层又有i个神经元,所以不可避免的要一个n * i的循环,而循环是比较浪费性能的,所以我们可以使用矩阵表达:
    神经网络计算公式
    wi,j表达的是从上一层第i个神经元到下一层第j个神经元的权重。如果这里有同学要问为何权重矩阵是k×n,上一层的输入值的矩阵为n×1,而偏置矩阵为k×1,我推荐你再去学习下矩阵的运算。用向量来表达为: a ( i + 1 ) = σ ( w a ( i ) + b ) \boldsymbol{a^{(i+1)}} = σ(\boldsymbol{wa^{(i)}+b}) a(i+1)=σ(wa(i)+b)。向量化后,我们就可以使用numpy来进行高效的矩阵运算了。
  5. 上一层的输入(乘了权重并且加了偏置后)丢入激活函数,成为这一层的输出。
  6. 神经网络也是个函数。

参考

[1]百度百科.激活函数[EB/OL].https://baike.baidu.com/item/%E6%BF%80%E6%B4%BB%E5%87%BD%E6%95%B0/2520792?fr=aladdin,2018-7-10.
[2]車輪の唄.激活函数的作用[EB/OL].https://blog.csdn.net/asdfsadfasdfsa/article/details/92831177,2019-6-19.
[3]ByiProX.神经网络的激活函数为什么要使用非线性函数?[EB/OL].https://blog.csdn.net/qq_34152244/article/details/100642157,2019-9-8.
[4]3Blue1Brown.【官方双语】深度学习之神经网络的结构 Part 1 ver 2.0[EB/OL].https://www.bilibili.com/video/BV1bx411M7Zx,2017-10-19.
[5]涂铭,刘祥,刘树春.python自然语言处理实战核心技术与算法[M].机械工业出版社:北京,2018-4:195-204.

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值