我是一个AI神经元我是一个AI神经元,刚来到这个世界,一切对我来说都很新奇。我得到这个名字是因为我的工作有点像人体中的神经元。人体内的神经元可以传递生物信号,向它输入一个信号,经过处理后再输出一个信号给其他神经元,最后传给大脑,完成对一个信号的决策和处理。聪明的计算机科学家受到启发,用代码发明了我:神经元功能。在我们的世界里,我只是一个普通的成员。像我这样的神经元有成百上千,甚至上万个。我们以层的形式形成了一个巨大的神经网络。很快我就在隔壁的摊位认识了大白,他比我来得早,对这里熟悉多了。听大白跟我说,我们的神经网络是一个图像识别的AI程序,只要输入一张狗的照片,就能告诉你是柯基,还是泰迪、柴犬、二哈……·Neuron结构在大白的指导下,我很快学会了工作。虽然我们叫神经元,这个名字听起来挺神秘的,但其实我就是一个普通的函数,有参数有返回值。我有所有普通函数:defneuron(a):w=[...]b=...我有一个参数a,这个参数是一个数组,里面的每个元素我分别称之为a1,a2,a3。..用这个来模拟我的神经元组信号接收到的信号。我不知道人类神经元如何处理输入的生物信号,我想这很复杂。不过这里很简单:我给每一个输入值设置一定的权重,然后做简单的加权求和,最后加上一个偏移值!所以我还有一个数组叫w,就是权重weight的意思,我把里面的每个元素都叫做w1,w2,w3...,至于偏移值,我称之为bias。这样大家应该猜到我的工作了,就是把传入的a中的每个元素乘以w中的每个元素,然后相加,最后加上偏移值,就像这样:在这里,我突然想到一个问题,打算问问大白。“大白,要计算的数据是从哪里来的?”“是上层神经元发出的。”“他们的数据是从哪里来的?”,我问道。大白把我带到门口,指着另外一个区域说:“你看到了吗?那里是数据预处理部,他们负责提取输入图像中的像素颜色信息,交给我们神经网络部进行处理。”分析。”“交给我们?然后”“我们的神经网络就像一台精密机器,我们只是两部分。不同的权重值代表了对图片中不同位置像素的关注程度“一种感觉。一旦开始,给我们提供图像数据,我们的每个神经元就会开始工作,一层一层地输出最终结果给分类器,最后识别出狗的品种。”神经网络训练正在聊着天,突然,广播里传来了通知声,大家停止了聊天,回到了各自的工作站。“干什么,打这么大?”我问大白。“坐吧,训练要开始了。”大白说道。“训练?训练什么?”“你说我们用的weights和offsets是怎么来的?是通过不断训练得来的。”话没说完,数据就开始发送了。按照大白之前教我的,我把输入的数据分别乘以各自的权重,然后相加,最后加上offsetbias,就得到了最后的结果。整个过程非常简单。我要把计算结果传递给下一层的神经元。大白见状连忙拦住了我,“等一下!你不能直接交出来。”“你还想要什么?”大白指着我身后的另一个人说:“那是激活函数,我得先交给他。激活函数是干什么用的?”我问大白。输入信号生成相应大小的输出信号。这是模仿人体神经元对神经信号的反应程度,就像拿针扎皮肤一样,身体的疼痛会逐渐加重,这几乎是同一个道理。”听了大白的解释,我点了点头,好像听懂了,但同时又好像听不懂。后来我发现out了激活函数有几种,我经常处理的有几种:sigmoidtanhreluleakyrelu激活函数处理后,终于可以交给下一层神经元了,我准备做点工作休息一下,刚坐下,就听到大厅里的广播:接着,又来了一组新的数据,看来是没时间休息了,赶紧又忙起来了。忙不忙也没关系,一干就是几个小时,干活重复了上万次,累得几乎要瘫痪了。Lossfunction&optimizationmethod趁着休息时间,又和大白聊了聊。“大白,刚才我们来来回回几万次,这是在干什么?”大白也是气喘吁吁,过了一会才说道:“这叫网络训练。通过让我们分析大量不同品种的狗的图片,让我们训练出合适的权重和偏移值,这样我们就可以成为熟悉狗的品种,以后正式工作的时候也可以用新养的狗的图片,我们用学到的知识来区分一下吧!”“那你是怎么训练的,跟我说说吧”,我继续问道。这个训练就是通过不断尝试修改每一层神经元的权值和偏移值来不断优化,找到最合适的值。我们在识别犬种方面的准确率是最高的!”大白说,“继续改造?这么多神经元,莫非是瞎碰运气?他这么一说,我更糊涂了,“什么学习方法?”“其实很简单,我们先选择一组权重偏移值,做一轮图像识别,然后看识别结果和实际结果的差距,差距有多大?反馈后gaptous,我们会不断调整weight和offset,让gap不断缩小,直到gap接近0,这样我们的识别准确率才会更接近100%”“嗯,听起来好像很简单,但我还有很多疑问。如何衡量这个差距?具体如何调整权重偏移量?调整范围应该是多少?”我的小脑袋冒出许多问号。大白一脸不可思议,“小伙子,不错!你问到了神经网络的三大核心概念。”“哪三个?快说。”大白喝了一口水,顿了顿,继续说道。说,“首先,这个差距怎么衡量?这个工作,我们部门有专门做这个工作的,他就是损失函数,专门量化我们输出的结果和实际结果之间的差距。量化的方式有很多种,你有空找他聊聊。”“第二个呢?”“第二个,怎么调,这也涉及到我们神经网络中的一个核心概念,就是优化方法,我们部门用的最多的是一种叫梯度下降的方法。那东西有点复杂,一时半会儿没法跟你解释,不过大概是想通过求导的方式,让损失函数的损失值变小。”大白继续耐心解释。“好吧,那第三个核心概念是什么?”“你刚才不是问调整范围吗?这个调整幅度太小了,所以我们训练的太慢了,需要训练很多次。如果太大,一不小心错过了最优值,损失函数的结果就会来回摆动,无法收敛。于是就有了一个叫学习率的值,这个值通常需要程序员用经验来设置”我还沉浸在大白的讲解中,广播又响起:看来程序员修改了学习率,只好振作起来继续努力,真的不知道什么时候才能达到训练标准~本文转载自微信♂《编程技术宇宙》可通过以下二维码关注,转载本文请见谅联系编程技术宇宙公众号。
