2024年最新深度学习(三)—— 神经元与神经网络_神经网络神经元(1),offer拿到手软

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

1 什么是神经网络和神经元

人工神经网络(英语:Artificial Neural Network,ANN),简称 神经网络(Neural Network,NN)或 类神经网络,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型,用于对函数进行估计或近似。

人脑可以看做是一个生物神经网络,由众多的神经元连接而成。当神经元“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“阈值”,那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质。

在生物神经网络中,每个神经元与其他神经元相连。各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通过轴突输出信号。生物神经元如下图:

在这里插入图片描述

那怎么构建人工神经网络中的神经元呢?

受生物神经元的启发,人工神经元接收来自其他神经元或外部源的输入,每个输入都有一个相关的权值(w),它是根据该输入对当前神经元的重要性来确定的,对该输入加权并与其他输入求和后,经过一个激活函数 f,计算得到该神经元的输出

一个简单的神经元如下图所示:

在这里插入图片描述

其中:

  • a

1

,

a

2

a

n

a_1,a_2\cdots a_n

a1​,a2​⋯an​ 为各个输入的分量

  • w

1

,

w

2

w

n

w_1,w_2 \cdots w_n

w1​,w2​⋯wn​ 为各个输入分量对应的权重参数

  • b

b

b 为偏置

  • f

f

f 为激活函数,常见的激活函数有tanh,sigmoid,relu

  • t

t

t 为神经元的输出

使用数学公式表示就是:

t

=

f

(

W

T

A

b

)

t = f(W^TA+b)

t=f(WTA+b)
可见,一个神经元的功能是求得输入向量与权向量的内积后,经一个非线性传递函数得到一个标量结果

1943 年,McCulloch 和 Pitts 将上述情形抽象为上图所示的简单模型,这就是一直沿用至今的 M-P 神经元模型。把许多这样的神经元按照一定的层次结构连接起来,就得到了神经网络。

2 神经网络的种类

2.1 单层神经网络

单层神经网络是最基本的神经元网络形式,由有限个神经元构成,所有神经元的输入向量都是同一个向量。由于每一个神经元都会产生一个标量结果,所以单层神经元的输出是一个向量,向量的维数等于神经元的数目。

示意图如下:

在这里插入图片描述

2.2 感知机

感知机由两层神经网络组成,输入层接收外界输入信号后传递给输出层(输出+1正例,-1反例),输出层是 M-P 神经元。

在这里插入图片描述
感知机的作用:

把一个n维向量空间用一个超平面分割成两部分,给定一个输入向量,超平面可以判断出这个向量位于超平面的哪一边,得到输入时正类或者是反类,对应到2维空间就是一条直线把一个平面分为两个部分。(简单的二分类模型,给定阈值,判断数据属于哪一部分)

超平面:是指n维线性空间中维度为n-1的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中,一条直线是一维的,它把平面分成了两块;三维空间中,一个平面是二维的,它把空间分成了两块

2.3 多层神经网络

多层神经网络就是由单层神经网络进行叠加之后得到的,所以就形成了 的概念,常见的多层神经网络有如下结构:

  • 输入层(Input layer),众多神经元(Neuron)接受大量输入消息。输入的消息称为输入向量。
  • 输出层(Output layer),消息在神经元链接中传输、分析、权衡,形成输出结果。输出的消息称为输出向量。
  • 隐藏层(Hidden layer),简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。隐层可以有一层或多层。隐层的节点(神经元)数目不定,但数目越多神经网络的非线性越显著,从而神经网络的强健性(robustness)更显著

利用神经元来构建神经网络,相邻层之间的神经元相互连接,并给每一个连接分配一个强度,如下图所示:

在这里插入图片描述

特点是:

  • 神经网络中信息只向一个方向移动,即从输入节点向前移动,通过隐藏节点,再向输出节点移动,网络中没有循环或者环。
  • 同一层的神经元之间没有连接
  • 每个连接都有一个权值
  • 第 N 层的每个神经元和第 N-1 层的所有神经元相连(这就是full connected的含义),第 N-1 层神经元的输出就是第 N 层神经元的输入
  • 所谓的全连接层就是在前一层的输出的基础上进行一次

Y

=

W

x

b

Y=Wx+b​

Y=Wx+b​的变化(不考虑激活函数的情况下就是一次线性变化,所谓线性变化就是平移(+b)和缩放的组合(*w))

3 神经元的工作方式

人工神经元接收到一个或多个输入,对他们进行加权并相加,总和通过一个非线性函数(激活函数)产生输出。
在这里插入图片描述

  1. 所有的输入xi,与相应的权重 wi 相乘并求和

在这里插入图片描述

  1. 将求和结果送入到激活函数中,得到最终的输出结果:
    在这里插入图片描述

3.1 激活函数

激活函数的作用

在前面的神经元的介绍过程中我们提到了激活函数,那么它到底是干什么的呢?

假设我们有这样一组数据,三角形和四边形,需要把他们分为两类

在这里插入图片描述

通过不带激活函数的感知机模型我们可以划出一条线, 把平面分割开

在这里插入图片描述
假设我们确定了参数 w 和 b 之后,那么带入需要预测的数据,如果 y>0,我们认为这个点在直线的右边,也就是正类(三角形),否则是在左边(四边形)

但是可以看出,三角形和四边形是没有办法通过直线分开的,那么这个时候该怎么办?

可以考虑使用多层神经网络来进行尝试,比如在前面的感知机模型中再增加一层,如下图:

在这里插入图片描述
对上图中的等式进行合并,我们可以得到:

y

=

(

w

1

11

w

2

1

)

x

1

(

w

1

21

w

2

1

)

x

2

(

w

2

1

)

b

1

1

y = (w_{1-11}w_{2-1}+\cdots)x_1+(w_{1-21}w_{2-1}+\cdots)x_2 + (w_{2-1}+\cdots)b_{1-1}

y=(w1−11​w2−1​+⋯)x1​+(w1−21​w2−1​+⋯)x2​+(w2−1​+⋯)b1−1​
上式括号中的都为w参数,和公式

y

=

w

1

x

1

w

2

x

2

b

y = w_1x_1 + w_2x_2 +b

y=w1​x1​+w2​x2​+b完全相同,依然只能够绘制出直线。但是可以发现,即使是多层神经网络,相比于前面的感知机,没有任何的改进

但是如果此时,我们在前面感知机的基础上加上非线性的激活函数之后,输出的结果就不在是一条直线

在这里插入图片描述
如上图,右边是 sigmoid 函数,对感知机的结果,通过 sigmoid 函数进行处理

如果给定合适的参数 w 和 b,就可以得到合适的曲线,能够完成对最开始问题的非线性分割

所以激活函数很重要的一个作用就是增加模型的非线性分割能力

在神经元中引入了 激活函数 ,它的本质是向神经网络中引入 非线性因素的,通过激活函数,神经网络就可以拟合各种曲线。如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,引入非线性函数作为激活函数,那输出不再是输入的线性组合,可以逼近任意函数。

激活函数的种类

(1)Sigmoid / logistics 函数

数学表达式:

在这里插入图片描述
曲线图像:
在这里插入图片描述

sigmoid 在定义域内处处可导,且两侧导数逐渐趋近于0。如果X的值很大或者很小的时候,那么函数的梯度(函数的斜率)会非常小,在反向传播的过程中,导致了向低层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为 梯度消失

一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。而且,该激活函数并不是以 0 为中心的(是以 0.5 为中心的),所以在实践中这种激活函数使用的很少。

sigmoid函数一般只用于 二分类 的输出层。

实现方法:

# 导入相应的工具包
import tensorflow as tf
import tensorflow.keras as keras
import matplotlib.pyplot as plt
import numpy as np
# 定义x的取值范围
x = np.linspace(-10, 10, 100)
# 直接使用tensorflow实现
y = tf.nn.sigmoid(x)
# 绘图
plt.plot(x,y)
plt.grid()

(2)tanh(双曲正切曲线)

数学表达式:

在这里插入图片描述
曲线图像:

在这里插入图片描述

tanh 也是一种非常常见的激活函数。与 sigmoid 相比,它是以 0 为中心的,使得其收敛速度要比 sigmoid 快(相比之下,tanh 曲线更为陡峭一些),减少迭代次数。然而,从图中可以看出,tanh 两侧的导数也为 0,同样会造成梯度消失。

若使用时可在隐藏层使用 tanh 函数,在输出层使用 sigmoid 函数。

实现方法:

# 导入相应的工具包
import tensorflow as tf
import tensorflow.keras as keras
import matplotlib.pyplot as plt
import numpy as np
# 定义x的取值范围
x = np.linspace(-10, 10, 100)
# 直接使用tensorflow实现
y = tf.nn.tanh(x)
# 绘图
plt.plot(x,y)
plt.grid()

(3)RELU

数学表达式为:

在这里插入图片描述
曲线如下图所示:

在这里插入图片描述

ReLU是目前最常用的激活函数。 从图中可以看到,当x<0时,ReLU导数为0,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。然而,随着训练的推进,部分输入会落入小于0区域,导致对应权重无法更新。这种现象被称为“神经元死亡”。

Relu是输入只能大于0,如果你输入含有负数,Relu就不适合,如果你的输入是图片格式,Relu就挺常用的,因为图片的像素值作为输入时取值为[0,255]。

与sigmoid相比,RELU的优势是:

  • 采用sigmoid函数,计算量大(指数运算),反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
  • sigmoid函数反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。
  • Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

实现方法为:

# 导入相应的工具包
import tensorflow as tf
import tensorflow.keras as keras
import matplotlib.pyplot as plt
import numpy as np
# 定义x的取值范围
x = np.linspace(-10, 10, 100)
# 直接使用tensorflow实现
y = tf.nn.relu(x)
# 绘图
plt.plot(x,y)
plt.grid()

(4)LeakyReLu

该激活函数是对RELU的改进,数学表达式为:

在这里插入图片描述
曲线如下所示:

在这里插入图片描述
实现方法为:

# 导入相应的工具包
import tensorflow as tf
import tensorflow.keras as keras
import matplotlib.pyplot as plt
import numpy as np
# 定义x的取值范围
x = np.linspace(-10, 10, 100)
# 直接使用tensorflow实现
y = tf.nn.leaky_relu(x)
# 绘图
plt.plot(x,y)
plt.grid()

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

-blog.csdnimg.cn/2c4931dc2c4642498cfbf8e6cebdfe4c.png)
曲线如下所示:

在这里插入图片描述
实现方法为:

# 导入相应的工具包
import tensorflow as tf
import tensorflow.keras as keras
import matplotlib.pyplot as plt
import numpy as np
# 定义x的取值范围
x = np.linspace(-10, 10, 100)
# 直接使用tensorflow实现
y = tf.nn.leaky_relu(x)
# 绘图
plt.plot(x,y)
plt.grid()

[外链图片转存中…(img-T2zLxDJH-1715661230304)]
[外链图片转存中…(img-mCtBjfII-1715661230305)]
[外链图片转存中…(img-mkwo1Hu4-1715661230305)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值