在这篇文章开始前,首先需要声明:神经网络是深度学习的基础,其数学原理有一定难度,涉及了微积分和线性代数的内容,从头开始学习这些内容对于多年不接触高数的临床医生来说是不现实的。但是不理解这些基本概念,后续的内容无法展开。要精确地表达这些数学内容,势必会让文章变成数学公式、符号的重灾区,劝退读者。
所以我根据自己的理解,全篇使用比喻的方式进行讲述,或许有很多不准确的地方,但大方向基本是正确的。建议大家对基本概念入门后再翻阅专业的教科书进一步学习。
输入层、隐藏层、输出层
神经网络就像是一家公司
神经网络就像是一个公司,左边的输入层是底层员工,负责传递信息;中间的隐藏层是干部,负责整理底层员工传达的信息;最右边的输出层就是公司领导,分析干部整理过的信息后,最终做出决定。
举个例子,现在我们有一份数据集,收集了100名患者的性别、年龄、家族史、吸烟史、既往病史等10项作为自变量,是否患肺癌作为结局变量。我们的目标是建立一个模型,给出一名新患者的10项自变量就能预测患者是否患肺癌。因为有10列数据,那么底层员工(输入层)就有10个,公司配备了一层干部(一层隐藏层),包括3个干部(隐藏层神经元)。
这3个干部整理好10个基层员工的信息,让领导(输出层)做决定。因为输出结果是二分类,输出层一般为2个。领导可以睁眼看外部,他会反复研究已知的100名患者的结局,对比干部的信息,最后做出决定,这个患者究竟是不是真的有肺癌。
权重、偏置、激活函数
每个员工都有他的脾气
从图中可以看到神经网络这个公司里面的各层员工有千丝万缕的关系,图中的连线代表权重(w),可以理解为员工之间的感情,虽然图中看起来都一样,但实际上是有区别的。譬如5号基层员工和干部A感情好,这条线就更粗,代表权重更大。领导和干部B感情更好,权重大,就说明干部B说的话更容易影响领导做决定。
权重很好理解,那么偏置和激活函数呢?我们可以把偏置(b)比喻为员工的性格,激活函数(a(z))比喻为干部整理信息的方式。举个例子,5号基层员工给干部A提交的信息就是W5X5,干部A接收10个员工的信息,那么总信息量就是W1X1+W2X2+……+W10X10。
干部A接收了原始信息后,就要开始着手整理了,他的性格(偏置,b)会影响刚才的信息,变成Z=W1X1+W2X2+……+W10X10+b。但你还记得吗,领导很忙,干部的责任就是把信息整理归纳才汇报给领导,他的整理方式就是激活函数,所以干部最后输出的信息是a(z),就是把z的值输入到一段函数中。
激活函数有很多种,以最简单的阶跃函数为例,如果z<0,那么a(z)=0,如果z≥0,那么a(z)=1。也就是说干部选择了这种整理信息的方式,那么他的输出就只有0和1,对于领导(输出层)来说,工作负担就明显减轻了。另外常见的激活函数还有Sigmoid、ReLU、softmax等,根据实际情况选择。
代价函数
是时候给员工定个KPI了
刚才我们已经大概理解神经网络从左到右推进的过程了,但不知道你有没有发现一个问题:这么多的权重和偏置究竟是怎么确定的?让人惊讶的是,它们竟然是随机的!初始值一般在(0,1)的范围。
神经网络是个初创公司,员工们刚开始都不知道怎么工作,所以比较随意。这个时候领导的作用就必须体现出来了!在第一轮工作中,基层员工和干部把信息交给领导,领导把他们对100名患者的预测结果和实际结果对比,算出一个得分,发现差别很大。
领导大怒,一拍桌子开始教训员工:都是些什么玩意,重新返工再做!以后这个得分就是你们的KPI,目标就是把它降到最低!员工们战战兢兢地开始修改自己的权重和偏置,把第2轮的计算结果再给领导。领导摇了摇头,虽然得分已经下降了一些,但还远远不够。
于是第3轮、第4轮……,直至到第200轮,领导发现得分已经达到了最低,神经网络对数据判断的准确率已经达到了80%,没法再提高了,终于露出了欣慰的笑容。至此,各个员工的权重和偏置达到了最优数值。这个不断返工的过程就是反向传播。
从这里我们可以看出,领导的作用就是根据真实数据调整员工的权重和偏置。调整的依据就是预测结果和实际结果差异的得分,这个KPI就是代价函数,数值越小越好。
所以,我们可以大致这么理解,领导如果求出代价函数的最小值,那么所有的权重和偏置也就能算出来了。代价函数是人为设定的,常见的有平方代价函数、交叉熵代价函数等,根据实际情况选择,这里不作深入讨论。
梯度下降法
完成KPI就如同下山
你可能会说:哎,做领导真好,只要动动嘴,员工跑断腿。然而,领导在多少个夜深人静的晚上都在为如何降低KPI(求代价函数的最小值)发愁。领导的数学水平只停留在高中,他隐约记得当年学过的导数内容似乎可以解决他的问题。
求出代价函数f(x)的导数f′(x),再f′(x)=0的根,那这个点不就是函数的最小值了吗?譬如f(x)=X2,f′(x)=2X,那么函数的最小值就是(0,0)。
领导提笔就算,然而眉头一皱,发现事情并不简单,他手下那么多员工,作为未知数的权重和偏置也很多,这可比一元函数求导难多了呀!他苦思冥想了许多天,在一次爬山的团建活动中,把自己的困惑告诉了干部B。干部B眼神坚定地望着山下,说,“老板,你觉不觉得追求成功就像找下山的路,我们不可能一蹴而就,走一步再走一步总会到山脚的。”领导眼神一亮,对啊!计算KPI不正也是这样吗?我不可能让大伙学习一轮就知道各自最好的权重和偏置,但只要大方向对,每一轮都做调整,100轮、200轮,只要坚持就一定会找到最佳的配置!
梯度下降是寻找代价函数最小值点的方法,可以类比为走到山脚的过程;下山的方向可以类比为各个未知数导数的反方向;学习率可以类比为每次下山的速度。为了进一步理解这个过程,我用excel做简单的演示。
如下表所示,现在已知代价函数z,有两个未知数w1和w2,学习率为0.1。目标是用梯度下降的方法求z最小值。一开始我们位于(3,2)的位置,那么下一步应该往哪个方向走,走多远呢?第一轮要走的方向是:∂z/∂w1=2w1=2*3=6,∂z/∂w2=2w2=2*2=4,结合学习率,他们改变的幅度就是0.6和0.4
如下表,经过第一轮调整后,我们已经来到了(2.4,1.6)的位置了,此时代价函数的大小为8.32,已经比刚开始时降低很多。我们按照这个方法不断循环计算,当位置越接近山脚,改变的距离就越小。在30轮计算后,代价函数的值已经接近0了,这个时候w1和w2也接近真实解。这个例子只是为了体验梯度下降的步骤,现实情况远比这个复杂。
误差反向传播
领导要学会放权
随着公司的业务量增长,原来的干部也从1层增加到5层,新的挑战也随之而来。领导上次受干部启发,悟出了完成KPI就如同下山:把函数图像看成斜坡,沿着坡度最陡的方向一步一步的下降, 将这个想法在数学上表示出来,就是梯度下降法。
可是当公司规模越来越大,员工越来越多后,他发现这个方法已经行不通了。一方面,以前只有一层干部,求导还不算难,现在干部有5层,他需要根据KPI先计算离自己最近一层干部的权重和偏置的导数,再算下一层的导数,如同套娃一般。
另一方面,员工多了,各自的未知数也增加。这两方面导致用梯度下降法计算的工作量很大,难以进行。老板不懂放权,就自己干到死!领导后来在MBA的课程中学习到了放权的艺术:他本人只需要紧紧盯住第5层干部给出的预测和实际数据的误差,给第5层干部设定KPI,第5层干部根据第4层干部的误差设定下一级的KPI,如此递进。最后,领导只需要知道第5层干部给的信息,很快就能溯源到基层干部的权重和偏置,不需要自己亲自计算了。误差反向传播就类似这种领导放权的方法。
卷积神经网络
开展图像业务的必备手段
公司在领导英明的带领下,业务进一步拓展,以前分析的数据都是常见的表格数据,现在他们把业务范围拓展到图像了:共有1000张猫和狗的黑白图片,大小为6*6像素,需要构建一个猫狗分类的模型。
既往的表格数据都是一个案例一行,现在的图片数据一张图片对应的是一个二维的矩阵,怎么有效利用这些矩阵数据是一个新的挑战。为此,公司请来了一批新的干部。相比之前的老干部,新干部表现更活跃,他们会从6*6的图像矩阵中逐个挑选3*3的小矩阵,根据自己的偏好改变矩阵里的信息,最后形成新的矩阵,这个过程称为卷积。
如下图,Kernel(卷积核)就是新干部的“偏好”,Feature Map(特征图)就是运算后的新的矩阵。但新的矩阵信息量还是有点大,下一步会交给下一层干部进行整理。下一层的干部在新矩阵中每2*2格挑选出最大值,又形成一个新的矩阵,这个过程叫池化。相对传统的神经网络,卷积神经网络能处理更复杂的数据。在基本了解这些概念后,我们下一课试试用软件实操,建立一个简单的神经网络。
卷积过程
池化过程
本文荟萃自医咖会,只做学术交流学习使用,不做为临床指导,本文观点不代表数字日志立场。