上一讲我们不仅介绍了逻辑回归和Softmax,还详细讲解了MNIST数据集的相关内容,今天我们要重点讲讲建模的思路以及一些核心概念和算法。
在讲解建模思路之前我们先抛出一个假设:图片的像素值与图片中的数字类别或数字存在的证据是线性相关的。这句话并不难理解,这里我简单说说什么叫线性相关。假设有向量a1、a2、a3、……、aN,存在w1、w2、w3、……、wN,不全为零,使得a1*w1+a2*w2+……+aN*wN +b = 0,b为实常量,则称aN线性相关。在这里我要吐槽一下腾讯微信,公众号编辑器居然不支持数学公式,知识传播难道就不需要数学吗?(^-^)
有了这个假设后,那么如果存在向量W如图所示,使得X线性相关。W
为模型中的权重,所谓权重是用来衡量因子在模型运算中的影响。权重越大,那么其对应的因子在模型中越重要,对模型运算的结果影响就越大。那么,同时我们假设图片中的手写数字是i的证据为evidence,那么,我们可以把这种关系用数学表达式表示出来,如下图:
图一
图二
图二是图一的另外一种表达,式中的b是我们设置的偏置量bias。建模到了这一步非常关键,试想一下,如果我们就用上边的公式去训练会出现什么情况?每次运算结果都只有两种可能,正确/错误。而这里尴尬的事情是我们很难衡量错误结果离正确结果的偏差有多大。这里不妨引入另外一个概念——概率。假设要识别一张包含9的图片,那么模型判断数字是9的依据是什么呢?概率。如果在计算得到图片为9的概率是90%,而同时是6或8的概率是6%,那么,我们有理由相信这个图片中的数字应该是9。这里我们提到的这个概率即是Softmax要解决的问题。我们将每个像素的强弱对于数字i的判断的影响标识成线性相关,而每次对于图片中手写数字的判断,是i的概率我们表示成下式:
上试也可以采用更为直观的向量运算来表示:
图(一)
图(二)
或者更为紧凑简洁的表示方式:
好了,有了模型以后我们就可以开始训练了吗?当然,但是这里还缺一些关键的东西。显然,通过上式我们不难得出这样的结论:模型训练的结果就是要得到正确的W和b。有了W和b,我们就可计算出任意一张图片中的手写数字是几了。我这里描述一下训练的过程:
1.在训练开始前,需要首先将b和W初始化,b可以是任意值,W是不全为零的向量。为了构建更加有效的概率分布,我们可能需要做一些人为的限制,比如权重值不能为0或负值,同时,所有权重值的和为1。
2.计算机不可能像人一样根据经验猜测那种结果看起来更可靠,他擅长的是将所有的情况都穷举的计算一遍,这就产生了另外一个问题,在训练过程中,所有的参数应该按照怎样的规则调整,递增/递减,甚至可能某些递增、某些递减。为了让训练更高效,模型能够快速收敛,需要引入另外一个秘密武器——优化算法。
常用到的优化算法有如下几种:
Batch gradient descent
Stochastic gradient descent
Mini-batch gradient descent
Momentum
Nesterov
Adagrad
Adadelta
RMSprop
3.其实在上一步的描述中隐含着一个关键性的问题,我们如何衡量模型预测结果与真实结果的偏差?这里需要我们引入另外一个概念——成本(cost)或损失(loss)。道理很简单,模型产生的成本或损失越小,那么模型的准确率就越高。这里我们采用一个非常常用的计算成本或损失的公式交叉熵。
公式中y即是我们训练结果,y‘是实际值,即我们在上一讲中提到的标签值one-hot vector。
4.有了以上三部基本可以开始训练了,但似乎还是少一些东西,那就是模型评估工具。这里我们不做过多介绍,后续的文章中将逐步拨丝抽茧,将所有人工智能的知识点做一个讲解。
领取专属 10元无门槛券
私享最新 技术干货