我的两分钱 2023-08-24 226 0 0 0 0
人工智能,AI原理,年初被ChatGPT彻底惊艳后,我开始入坑机器学习,因为我的数学一直都比较渣,所以这段时间我也经历了比较多的起伏变化,这篇文章就来讲讲我的故事。和很多人一样,我也是从Prompt玩起的,看了很多文档后…

年初被ChatGPT彻底惊艳后,我开始入坑机器学习,因为我的数学一直都比较渣,所以这段时间我也经历了比较多的起伏变化,这篇文章就来讲讲我的故事。

和很多人一样,我也是从Prompt玩起的,看了很多文档后也总结了一些Prompt的基本玩法进阶技巧,但显然仅仅熟悉Prompt是远远不够的,所以接下来我又玩了一段时间羊驼系列,做了点小应用(中间还在LangChain社区混了几周),也看了一些论文,了解了一下MRKLPPOSelf-InstructRLFH之类关键概念,深入理解了Transformer的工作原理

上面的这个阶段大概花了几个月左右的时间,经过这一通蒙眼狂奔,算是完成了最基本的扫盲,看一些大神的文章不再是一脸懵的状态,也能分辨出砖家和专家了。但这个时候我也陷入了迷茫,继续这么在应用层捣鼓,也许可以积累一点实践经验,但就像Transformer的出现让很多传统的NLP工作失去了意义一样,今天的实战经验随着AI的快速迭代,其保质期可能也短的可怜。所以我该如何继续我的机器学习之路呢?

我一直相信一个简单的道理,如果一个东西所有人都能轻易掌握,那么它就不会成为竞争力,基于这个道理,我的机器学习显然应该往深度这个方向努力。

但深入学习机器学习,一个很大的挑战就是数学,几年前我曾经试着从著名的西瓜书入门,结果啃了很久最终还是被各种复杂的数学推导给劝退了,这次我该怎么办?

既然数学是个挑战,如果绕过数学也能深入机器学习,那就完美了。那么数学可以绕过吗?对于稍微有些经验的人,这个问题的答案都是否定的,但作为一个小白,我还是想花点时间,解释一下为什么数学不能被绕过。

就像第一性原理一样,需不需要数学,也还是需要回到我们的根本目的,如果我们的目的是用AI来解决一些实际问题,我觉得不需要或者只需要很少的数学就能解决很多问题。

AI是一门实践的艺术,今天不管是像PyTorch这样的开发框架、还是像OpenAI等大厂提供的API,他们都已经把相关的数学封装在了你几乎永远也不会触及的底层代码中,你只需要深入地理解业务问题,然后合理地使用这些API,你就能做出很好的应用,比如在Github上一度大火的AutoGPT,就完全不涉及数学。很多AI应用的开发就像炼丹,你做的最多是在一个黑盒子上,试验各种参数、Prompt之类的组合,最终解决你的问题,如果你还想更进一步,你的精力也主要会花在一些工程化的工作上。

回到我入坑机器学习的目的。我自己是真的相信AI是新一波工业革命的起点,就像从蒸汽机的发明到工业革命真正解放生产力经历了几十年一样,我相信今天的ChatGPT、具身智能、机器人/狗、自动驾驶等所有这些都不过是AI时代的蒸汽机,未来几十年才是AI大爆发的年代,作为一个码农,要想不被时代抛下,唯有拥抱AI。我必须要深入学习和理解机器学习,而不是仅仅停留在应用层面。

从这个目的出发,数学就是必须的了,虽然AI最终还是要落到解决实际问题上来,但如果对AI只有工程上的经验而没有数学上的理解,那就和死记硬背的学生一样,在实际应用场景,一旦碰到一些新问题,我们往往会束手无策。

举个例子,比如在线性回归问题中,我们往往用MSE(也叫均方误差,就是把预测值和目标值差异的平方取均值)来作为损失函数,但为什么选择MSE做损失函数是合适的呢?简单的回答是预测值和目标值的差有正有负,取平方就可以保证损失函数的取值总是为正数。但如果是这样的话,那么取预测值和目标值差异的绝对值做损失函数可不可以?答案是也可以,但因为这个损失函数在驻点处不可导,所以会导致模型训练的后期会出现震荡。

那么是不是线性回归就总是应该选择MSE做损失函数呢?实际上,选择MSE有一个前提假设,那就是我们观测到的输入存在噪声,并且这个噪声符合正态分布,这种情况下,模型的最大似然估计等价于均方误差,如果我们的噪声是一个指数分布,那么MSE就不一定是好的选择了。

从这里例子里我们可以看到,只有从数学上真正理解了机器学习,我们才能在解决实际问题的时候有效地使用机器学习技术。除此之外,今天AI的最新进展往往都在论文里,如果没有一定的数学基础,这些论文读起来往往特别吃力,要想跟上AI的发展趋势,我们也需要直面数学这个挑战。

那么问题来了,要深入理解机器学习,就必须面对数学的挑战,但我的数学又太渣,这不就成死结了么?再啃一遍西瓜书,估计效果也不会太好,难道我得先花两年时间把大学的线性代数、概率、微积分这些先学一遍么?

我没试过真的从头开始啃大学数学,但这几个月我也摸索出了一些应对策略,目前看效果还不错,通过这些办法,我基本算是深入理解了线性神经网络和多层感知机的工作原理,也从头手撸了CNN,RNN,LSTM等常见模型...,算是了解了一些机器学习的皮毛,而下面就是我这个数学小白总结的一些策略:

策略1:从实践入手,先解决一些简单问题,培养自己的兴趣,为后面的攻坚储备心理能量。这里我强烈推荐《Deep Learning for Coders with Fastai and PyTorch: AI Applications Without a PhD》,这本书的作者估计也是看到了很多像我这样的数学小白太痛苦,所以第一章就实现了一个简单的猫狗分类器,之后也是重实践、轻数学,带大家快速熟悉和理解各种常见的机器学习模型,能够开始用机器学习来解决实际的问题。

策略2:理解问题比理解解法更重要,理解思路比理解数学推导更重要。虽然心理能量的储备给了我足够的动力,但机器学习涉及的数学推导对我来说还是困难重重,我没有选择死磕,我的办法是先去深入理解这些数学方法到底要解决什么问题?其背后的想法是什么?理解了Why就能更好地理解How。

就像上面线性回归选择MSE做损失函数的例子,我记得第一次看西瓜书的时候提到要做最大似然估计,我完全是懵的,而这次当我理解实际我是要找到一组参数,通过这组参数让模型能更好地拟合训练数据的时候,虽然其推导依然让我头大,但我完全理解了最大似然估计的目的,这极大地帮助了我理解线性回归的本质。

再比如,原来梯度下降眼花缭乱的求导让我极度不适,但当我理解了要解决的问题是找到模型的最优参数,穷举效率太低,而求导数就是找一条优化捷径的时候,虽然求导依然很复杂,但是我对梯度下降的理解又进了一步。

策略3:囫囵吞枣。一个复杂的数学推导,如果我没法理解推导过程,我就先记住关键结论,不懂的部分先放着,有时候看多了慢慢就理解了。举个简单的例子,深度学习中,神经网络的层数很多,各层之间一般通过非线性函数(如ReLU)连接,为什么要这样?数学上说如果简单地叠加各个线性层,在数学上等价于一个只有一层的线性神经网络,我原来不理解为什么,但我先记住了这个结论,有一天我突然发现这在数学上是很显然的,然后我居然开始好奇自己为啥一开始就不能理解。

类似地,一个复杂的数学推导往往包括很多中间步骤,如果我不能理解完整的推导,我就先把大的推导拆成几个小部分,先记住每个部分的关键结论, 理解大的推导过程,不懂的部分留到以后再说。这就和常见的“抓大放小”的策略一样,先掌握关键脉络,细节后面慢慢突破。

策略4:看不懂有可能是找的资料不对。我的经验是找资料不一定要找大神写的,因为很多我不理解的东西,对大神来说则太过显然,往往会被一笔带过。我发现YouTube是个宝藏,上面有很多人非常耐心地用图文并茂、甚至是动画的方式,把一些数学概念解释得很清楚,这里我强烈推荐3blue1brown,它的每个视频几乎都是精品。

有时候,ChatGPT也是很好的老师,搜索引擎最大的问题是缺乏针对性和交互,而当我请ChatGPT给我解释一些数学概念的时候,一方面它的解答往往比较简练,另一方面,我可以针对它解答中我不明白的地方,不断地追问相关的问题或请它举例子,这就像有个私教一样,很多时候效率很高。

策略5:记住“九九乘法表”。相信大家小时候都背过九九乘法表,背熟了它,我们小时候算算数的速度就会突飞猛进。对于机器学习涉及的数学也是如此,记住一些常用的数学符号、数学定理、法则,很多原来天书一样的数学公式会突然变得简单很多。我自己整理了一个小抄,上面有求导的链式法则、常见函数的导数、导数的加减乘除法则、贝叶斯公式等等,每次我看数学推导的时候就把小抄放在旁边,效果很好。下面是我小抄的一部分:

策略6:空余时间看看一些数学科普,理解一些数学概念背后的基本想法,比如微积分,比如导数等等。“任何复杂的事物背后都一个简单的想法” 这句话对我的影响很大,一些科普读物往往能穿过复杂的数学推导,带我们回到问题的源头,通过对问题的根本理解让我们掌握相应数学的本质。比如导数的本质是衡量变化的速度,把这个应用到梯度下降,我们就能理解,求导的目的就是找找看如何修改参数,能让损失函数以最快的速度变小。这里我强烈推荐《微积分的力量》这本书,书中图文并茂,读起来轻松愉快:

以上就是我总结的6个策略,这6个策略帮我在入门机器学习的路上开了个好头,也希望能对您有帮助。

我知道要想深入理解机器学习,还会有很多的数学挑战,但行稳致远,AI带来的新工业革命是个几十年的进程,只要我们日拱一卒,我相信我们都会在这个新的时代具备自己的竞争力,咱们一起努力。



Tag: 人工智能 AI原理
相關內容
歡迎評論
未登錄,
請先 [ 註冊 ] or [ 登錄 ]
(一分鍾即可完成註冊!)
返回首頁     ·   返回[ChatGPT]   ·   返回頂部