前言
学习都是为自己,干货必定看的累。
基础知识要求
线性代数基础,python基础。不用很深,学习一下用到的内容即可,比如矩阵。
本人学习直接跟着床长的课程走的,很棒。
人工智能
人工智能的起源是人脑,所以,其特征是神经网络结构和黑盒。
神经网络指的是人脑,处理的基本单元是神经元,向上下级传递不同强度的神经信号,最后汇总得出结论。
黑盒是指我们也无法知道人遇到什么情况会释放什么强度的神经信号,不清楚整个链路的判断逻辑。也就是只知道“输入”和“输出”,不了解过程。
AI程序用代码模拟了这个过程,使程序有了学习和判断能力。它其实没有那么神秘,就像数学的起源只是1+1一样,人工智能最早期也只是几个神经元组成的几十行代码。和别的代码一样,无非是输入-处理-输出,只是处理过程有了数学的逻辑支撑。
基础概念
样本:目标实例。比如图片人脸识别AI,图片就是样本。
输入
既然是代码,那么肯定要输入计算机方便解决的数据源,比如我们最常见的人脸识别,数据源是图片,但是输入到程序之前,我们要把他转换成矩阵(这里要求回顾矩阵的定义和加减乘除法则)。图片有像素,比如1080*1080,每个像素点都是由三原色组成,所以我们可以把这个图片试做1080*1080*3个数字组成的矩阵。这个时候输入就变成了数字矩阵,计算机很容易处理。其他的AI算法也一样,音频视频都可以转成矩阵。
输出
输出结果一般就是特征值,true或false,或者一个数字。
处理过程
原始公式
重要步骤来了。最初的程序基于一个简单的判断逻辑,万法生于此
z = dot(w,x) + b
可以理解为X1,X2,X3是一个样本的3个特征,比如我们判断一个相亲阿姨会不会相中一个男生,样本就是这个男生,x1,x2,x3分别是男生的颜值,存款,身高这三个特征。w1,w2,w3就是这三个特征在阿姨心中的重要性占比,b是阿姨对这个男生先入为主的印象分,那么阿姨对男生的最终打分我们就可以简单的看做
z=(x1*w1+x2*w2+x3*w3)+b
也就是
z = dot(w,x) + b
那么当我们引入更多的x(男生的其他特征),更多的阿姨和叔叔(神经元的个数和层数),我们就可以得到婚恋市场对这个男生的相对客观的评价。
简单的流程在这里就介绍完了,后面的过程就是将简单的过程复杂化了。
激活函数
上面的流程,我们希望它输出一个最终的结果σ,就是阿姨会不会把闺女介绍给小伙。那么分数z增加可能性σ就变大。但是z和σ一般不是正比关系,而是曲线函数关系,比如z低于30分时,可能性都极小,z大于70分时,可能性都极大。所以我们需要一个激活函数,让程序更加智能。
激活函数常见的有十几种,目的一样,适用场景不同,这里我们看一个经典的sigmoid激活函数。
z就是公式里面的x。
可以理解为,计算结果和实际结果的映射关系。
刚开是学习的时候我想,那每个场景下,这个映射关系应该都是不同的,就像每个神经元面对相同的刺激释放的信号强度不同,但是在AI中,对每个神经元给不同的模型实在太过复杂,面对大模型千万甚至上亿的神经元,我们要考虑成本。一个大的模型一般只需要一个激活函数就足够学习进步了,只要在选模型的时候选中合适的,就可以得到想要的准确度。
损失函数
为了验证机器的学习结果是否准确,我们引入的损失函数的概念。
可以看到我们把模型变复杂的过程,逻辑是非常清晰的,从模拟神经元的判断模式,到把计算结果转换成现实结果,再到验证结果是否准确。
后续内容我学习的时候是VIP内容,我先简单介绍一下,后面的文章可能会开CSDN会员观看。也可能不会。
上文我们计算出了预测结果σ0,但现实中我们直接问阿姨给小伙介绍闺女的可能性是σ1。题外话:这就是我们刚开始做机器学习的时候要给机器一个“正确答案”。当然随着科技的发展,现在已经可以不给答案让它学习了,这个是很后面的内容了。
那么我们需要判断预测和现实的差距大不大,最直观的就是用σ1-σ0,得到差值。相减结果越大,预测越不准。但是只用减法判断结果并不准确,会出现和激活函数同样的问题:准确度和差值的关系是非线性的。
所以引入损失函数,将σ1视作y,σ0视作a就可以了。
ref:
有了损失函数,我们就可以真的做到“学习”,程序有能力自查自己的预测结果,再看到我们的原始公式,z = dot(w,x) + b
我们只需要再赋予程序自动优化的能力就可以了,这个优化,我们通过让程序自己不断修改自己的w和b来实现。代码逻辑就是让程序按一定的大小增大或减少当前的w和b,通过导数判断本次变化是否让结果变得更准确了,然后不断重复,向最优的w和b靠拢。这个过程也就是我们说的“跑模型”。
赋予程序自我优化能力的公式和逻辑,后面再写。
总结
现在看下我们用到的公式
z = dot(w,x) + b,预测结果
将结果映射到现实
L(y1,y2)=交叉熵损失,判断结果准确度。
可以看到过程都是始于简单的逻辑,刚开始的结果都是直接用减法判断准确度,后来由于想要得到更准确的结果,开始寻求数学的帮助,更换了更复杂的公式。我们只要明白背后的逻辑,就算数学知识没那么牢靠,也能学好AI。这三个函数在后面可能也会迎来版本更新,但我们搭建起来的思维体系长存。当然,代数和代码都不扎实的朋友,写第一个demo的时候还是有挑战的:)
个人认为,有demo一定要跟写一遍,不要看懂了程序的逻辑就放一边了。容易变成王语嫣了。武林高手,还是要手上过。