基本功总是很香的,良好的基础才能决定上层建筑的质量和高度。
从今天开始陆续连载一些深度学习的基础,包括概念,数学原理,代码,最近也确实没什么热点可以蹭
先看机器学习和深度学习的对比:
"数据和特征决定了机器学习的上限,而模型与算法则是逼近这个上限而已",机器学习和深度学习的本质区别之一是特征工程,而特征工程又是决定最终结果好坏的最重要的因素之一;上图最上面描述是机器学习的流程,如果让一个计算机理解输入的信息是一个汽车,那么需要人类做很多特征工程工作,就是提取出这个事物的一些特征信息然后交给机器去认知去处理,上图的下部分就是深度学习的领域,在深度学习领域最重要的就是它可以自动的提取数据的特征,进行处理。
机器学习和深度学习第二个最大的区别就是数据量了(当然数据质量某种程度上更关键,不在这节课讨论范围),两者需要的数据量基本上是几倍甚至几十倍几百倍的关系。由于数据量的关系,所以深度学习需要的算力和机器学习也不是一个数量级。
那么深度学习是怎么样实现特征提取的呢?这就引入了另一个概念神经网络。
生物脑内是如何对这个自然界的一些事件做出反应?我们学过的初高中生物应该讲过,其实是神经元在传递彼此之间的电信号,神经元对经历的事件和刺激进行反应,每个神经元连接着若干个其他的神经元,各自有各自的电信号的阈值,当刺激超过阈值电信号就会在不同的神经元之间传递,进而在不同的神经元之间传递信息。
神经元是今天这篇文章的第一个概念,我本人确实不理解动物的神经元长啥样,但是计算机能理解的神经元大概长下图这样,1943年McCulloch和Pitts把上面文字中的逻辑给抽象出来了,形成下图这样的神经元概念图,这也是迄今依然沿用的M-P模型
上图的意思是,从a1到an有若干个输入,每个输入一起sum得到一个和数,但是到达sum之前不同的ax是要乘以一个系数就是权重w,不同的输入也要乘以不同的w,最后再加上一个bias偏移量b就得到了和数sum,然后sum要经过一个激活函数f得到output的值t,听起来是不是特别熟悉?没错,这个就是神经网络最基本的一个单元,神经网络就是由若干个神经元组成的!
用数学公式表示就是,因为w1-wn可以认为是一个向量W,a1-an可以认为是另一个向量A,所以一个复杂的乘法和加法我们将其化简为A乘以W的转置WT,再加上bias,最后过一个激活函数f就等于了output的 t,这样是不是就很好理解了!
由此可见,我们总结一下,一个神经元存在的意义:求一个输入向量和权重向量的内积,然后经过非线性化激活函数处理(因为线性化不管乘几遍都没法求解非线性问题,下文列式子解释)得到一个标量的结果。
第二个概念: 单层神经网络
顾名思义,就是拥有单层神经元的网络,我们可以看到它拥有多个输入,多个输入也可以分别给到不同的神经元,而不同的神经元又会计算出不同的Output值。
第三个概念:感知机
严格来说,我认为感知机才能算是一个最简单的神经网络,因为它拥有输入层输出层,一共2层,复杂的神经网络就是在输入层和输出层中间加一堆hidden层, 所有的神经网络都可以被归纳为输入层+输出层+hidden层。
感知机的作用或者叫能力:把一个N维度的输入向量,经过感知机,用一个超平面分割成为2部分,这个超平面可以判断这个向量位于超平面的哪一边,正例或者反例(标准2分类问题)
第四个概念:全连接层(用一张之前用过老图)
抽象一点说的话,全连接层可以当成若干个感知机的组合,每个感知机(比如第N层)的输入层和输出层,除了最后一层和最前一层以外,都和(N-1,N+1)层保持连接状态,并且每段连接都有自己的权重参数w
再抽象一点就是全连接层中的每一个神经元和前(后)一个神经元都有 y=Wx+b的线性关系(不考虑激活函数的存在)
本章的最后一个概念:激活函数
在讲激活函数之前,我们看一下一个标准的线性式子:y1=W1.x1+b1,如果我没有激活函数的话,这个式子在过一层神经网络之后会变成什么样子,大抵应该长这样y2=W2(W1.x1+b1)+b2 把式子拆解一下 y2=W2.W1.x1+W2+b1+b2, 因为W是一个常数,所以这个式子最终还为y=W.x+b, 也就是你不管过多少层,你还是个线性的式子,既然是线性的式子那就永远解决不了非线性的问题
再具体一点,我想要把下图的蓝色部分和黄色部分分开(2分类问题)
如果你用线性函数来划分,比如红色和绿色的直线,不管你怎么去改w和b都无法将这两组数据分开,我们需要的是绿色的箭头虚线一样非线性的能力才能达到我们的要求
所以引入了今天的最后一个概念:激活函数,激活函数就是来专门解决这个问题的,常用的激活函数有:
Sigmoid,ReLU,这些都是老演员了,激活函数的区别也主要在于函数图像和区间,有的在0到1比如Sigmoid,有的在负值区间Output始终为0,比如RelU,一般不同的激活函数也匹配不同训练任务的特性,比如ReLU经常用在NLP和CV领域,ELU会用在语音领域,当然也没那么绝对;而且随着现在技术的不断发展,又有了SwiGLU等(比如Llama就用SwiGLU来提升激活效率)更高效的激活函数
写在最后,这个系列我会不定期的更新,但是今后也不会光写这种技术文章,在写这篇文之前,我其实考虑了很久,写这个文章的目的其一是让更多喜欢深度学习的读者能了解一些背景和基础知识,省着有些文章一些专用词汇,公式晦涩难懂,看不明白,这文章可以起一个承上启下的作用;其二也是为了我自己,总得写点东西来检测自己到底有几斤几两,学过的东西如果能亲自写出来,我觉得基本就不会忘了,而且在写作的过程中,以前的一些一知半解说不定也会茅塞顿开。今后如果有什么新闻和事件或者前言的技术,我还是会可着热点蹭,在没热点的时候,还请各位读者大人继续支持,也看下这类文章,谢谢!