ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

快速入门深度学习01:神经元和神经网络

快速入门深度学习01:神经元和神经网络 开篇之前我详细写过两个专栏分别为《快速入门CV》和《快速入门NLP》讲道理这两个专栏针对原理是写的挺详细的但是想要快速上手的话其实要学的知识还是蛮多的。因此针对这部分我打算再好好写一下尽量精简一些同时形成文档可以提供给大家离线查阅。那么要想快速入门深度学习神经网络有点像这个领域的普通话了基本上不可能绕过去所以今天就从神经元和神经网络开始。1 神经元我们所说的神经网络基本单元可以视为神经元是仿生学的概念因此其实深度学习其实也是在模拟我们的大脑。1.1 生物神经元的启发人类大脑里的生物神经元工作逻辑其实很简单通过树突接收四面八方的信号在胞体里把信号整合起来如果总刺激超过了某个阈值就通过轴突把信号传给下一个神经元。简单说就三件事接收信号、整合信号、决定要不要激活输出。上世纪40年代研究者把这套逻辑抽象成了数学模型也就是MP人工神经元模型。它就是整个人工神经网络最基础的计算单元。1.2 一个神经元到底在算个啥我们拿预测冰淇淋销量举例子输入是温度、星期几这些特征一个神经元就是对这些特征做一次打分然后进行预测。定义输入特征为向量每个特征对应一个权重 再加上一个偏置项 。 神经元的计算分成两步第一步线性加权求和把每个特征乘以对应的重要程度全部加起来再加上偏置量权重可以理解成「这个特征对结果影响有多大」可正可负偏置相当于给结果设置一个基准线避免所有输入都是0的时候神经元直接没输出。第二步非线性激活光有加权求和还不够我们还要把结果送入激活函数得到神经元最终的输出目前工程里最常用的激活函数是ReLU逻辑非常简单 输入大于0就原样输出小于等于0直接输出0。1.3 激活函数非用不可吗其实一开始我学激活函数的时候并没有过多的思考它的作用和必要性而是文章里这么说我就这么记随着学的深入其实慢慢就能理解。但是在这里还是和大家介绍一下它的作用并且知乎上有很多大佬举了很多生动的例子尤其是有一个掰铁丝的例子让我印象深刻有兴趣的朋友可以去搜索一下。我们直接上结论如果没有激活函数无论堆叠多少层神经元整个网络都等价于一层线性变换。再多的层数也只是反复做矩阵乘法其实这是线性操作到最后依然只能表达简单的直线关系。可现实世界里的规律大多都不是直线咋说呢感觉神经元做的操作感官上有点类似于直线模拟的函数有限激活函数可以假如非线性元素可以模拟各种曲线。所以呢激活函数给网络引入非线性能力。有了这一步“掰弯”模型才有能力去拟合那些复杂的、弯弯曲曲的函数曲线。你要把深度学习最后学到的模型视为一个无比复杂的函数那么它的函数图像必然不是一个直线当然一般其实也画不出来。当然单个神经元的能力还是很有限的。面对复杂的数据模式只靠一个单元远远不够。那怎么办由此我们想到了堆叠神经元神经形成网络。2 单层感知机的局限把输入直接连到输出神经元中间没有其他单元这就是单层感知机。单层感知机可以自动学习权重完成简单的二分类任务。但研究者很快就发现了它的致命问题。2.1 解决不了异或问题MP只能处理线性可分的数据。最经典的例子就是XOR异或问题输入两个相同输出0输入不同输出1。就这么简单的逻辑MP怎么都做不到。很明显无论怎么调整权重光靠直线无法区分class0和1。那么到是什么导致的呢因为缺少一层能做特征空间变换的中间层。聪明的你会想到原始空间里分不开的数据能不能先把它映射到另一个空间让它在新空间里变得可分顺着这个思路研究者加入了隐藏层多层感知机MLP就应运而生了。3 多层感知机MP隐藏层一个基础的多层感知机由输入层、隐藏层、输出层三部分构成。3.1 三层网络分别干什么活输入层不做任何计算只负责接收和传递原始数据隐藏层网络真正的干活儿的地方。一层里有很多神经元每个神经元都对上一层的数据做加权求和激活。原始特征经过这一层就被映射到了新的特征空间输出层接收隐藏层变换好的特征输出最终的预测结果。回归任务输出数值分类任务输出类别结果。3.2 前向传播我们拿只有一层隐藏层的网络举例过一遍完整的计算流程。设 是输入层到隐藏层的参数 是隐藏层到输出层的参数。先算隐藏层的输出再算最终的预测输出整个过程就是原始输入经过隐藏层做一次非线性变换变换后的特征再交给输出层计算得到最终结果。3.3 前向传播解决的问题有一个很重要的理论叫万能逼近定理只要隐藏层的神经元数量足够多单隐藏层的神经网络就能以任意精度逼近任意连续函数。这句话相当于给研究者吃了一颗定心丸多层网络在理论上拥有足够强的表达能力。理论上你就去堆网络吧最终肯定能对出你想要的函数模型。但是理论可行不代表训练可行。网络刚初始化的时候所有权重、偏置都是随机生成的。拿随机参数跑出来的结果基本等同于瞎猜。那怎么让这些参数自动调整让预测越来越准这里就会涉及一整套神经网络训练流程用损失函数衡量错了多少用梯度下降找更新方向再用反向传播把误差一层层传回去。这一块涉及不少推导全部铺开的话篇幅会很长。所以损失函数、梯度下降、反向传播这些训练相关的内容我们放到下一篇文章完整讲解。本篇我们先把网络本身的结构和前向逻辑吃透。4 深度神经网络再和大家说一下深度神经网络刚才我们只用到了一层隐藏层。如果继续堆叠更多隐藏层每一层都做一次线性变换激活就得到了深度神经网络也就是我们常说的深度学习。层数加深之后网络会形成一种逐层抽象的特征提取逻辑。拿图像识别举例子就很好懂浅层神经元捕捉边缘、简单纹理中间层组合边缘识别轮廓、局部形状更深层再把局部形状组合起来得到物体的整体特征。每一层都在上一层的基础上做进一步的加工和抽象。当然层数变多也会带来新问题。比如大家常听说的梯度消失、过拟合。这些都属于训练优化层面的问题我们留到后面再展开。总结一下人工神经元灵感来自生物神经元核心是加权求和 非线性激活激活函数是网络拥有非线性能力的关键。单层感知机只能处理线性可分任务面对XOR这类简单非线性问题都束手无策。加入隐藏层得到多层感知机MLP通过特征空间变换解决了非线性拟合问题理论上足够多的神经元可以逼近任意连续函数。多层网络的前向传播就是数据从输入层开始逐层做线性计算激活一路流向输出层。网络初始参数都是随机值想要让模型学会规律需要完整的训练机制。训练部分我们下一篇详细拆解。本质上来说神经网络就是一套带可学习参数的分层函数映射框架。现在就粗暴的理解为函数吧我们后来熟悉的CNN、RNN、Transformer底层都建立在这套基础逻辑之上。所以说它是深度学习领域的普通话一点都不过分。
返回列表