
1.4 AI进行页面重构的方法
看到这里,读者可能会产生疑问:这和看着设计稿进行页面重构有什么区别?答案是:没有,也有。没有区别,是因为AI进行页面重构的过程只是替代前端工程师进行工作,并没有改变页面重构的工作流程和工作内容;有区别,是因为AI的替代使页面重构的方法发生了本质的变化,以往前端工程师看设计稿、理解设计稿、切图、布局及选用HTML、CSS进行设计稿还原的过程,变成了用机器视觉识别设计稿,用算法模型理解设计稿,用神经网络和算法决策如何切图、布局,以及选用HTML、CSS进行设计稿还原。
AI页面重构的方法如图1-5所示。
陡峭的学习曲线和大量AI领域机器学习的专业概念是理解D2C能力的拦路虎,因为机器视觉、算法模型、神经网络、fastRNN、YOLO、NLP、目标检测、分类模型、语义识别等机器学习专业概念太复杂。但是,如果从AI应用的角度去描述机器学习,就可以聚焦到3个问题:原理、过程、调试方法。

图1-5 AI进行页面重构的方法
1.4.1 原理
机器学习的原理莫衷一是,一般的理解是:基于最大熵原理对输入的概率分布进行算法模型的拟合,未来可以对输入做出概率预测。这个理解就把机器学习分成训练和预测两个部分,训练的质量影响预测的准确性。
最大熵原理其实是一个最朴素、最简洁的思想,如果理解一个六面的骰子掷出其中一面的概率是1/6的话,那么就已经掌握了最大熵原理。对于骰子,由于不知道是否有人做手脚,唯一知道的是每一面出现的总概率等于1,因此把这个已知的条件称为“约束条件”:P(x=1)+P(x=2)+…+P(x=6)=1。所以,最符合现实的客观假设是:这是个正常的骰子,每一面出现的概率是个“等概率事件”,即P(x=1)=P(x=2)=…=P(x=6)=1/6。所谓最大熵原理就是指满足已知信息(约束条件),不做任何假设(不掺杂主观因素),把未知事件当做等概率事件处理。比如:在算法模型看来,一个UI出现img、text、view、iconfont等控件的概率是相等的。
1.4.2 过程
以图1-5中的类型识别为例,共有img、text、view、iconfont四种类别的控件出现在业务场景中,那么,根据最大熵原理,每种控件出现的概率应该是1/4。但是,作为前端工程师,会有一个经验(或者叫先验)的判断:iconfont出现的概率在4种类别中应该是最低的。于是,我们收集所有过往构建的页面,在收集的数据上进行统计分析后发现:iconfont出现的概率为12%。这样就得到了一个新的约束条件(额外信息):P(iconfont)=12%。根据最大熵原理加入新的约束条件,然后把剩下的部分做等概率处理:P(img)+P(text)+P(view)=88%。这3个类别出现的概率是:88%÷3≈23%。根据经验,view出现的概率比较低,可能还要进一步统计分析修正约束条件,最后形成一个合理的结论,这个结论就是根据最大熵原理建立的统计学模型。未来,在输入一个页面的时候,就能够用这个统计学模型来预测img、text、view、iconfont出现的概率了。
上述过程已经完成了“人肉机器学习”,因为整个模型的约束条件是人工统计分析出来的。如果把人工统计分析变成算法模型统计分析,把约束条件换成算法模型里的激活函数、损失函数、Reward、Q值、互信息等模型参数,把收集的数据作为训练样本喂给这个算法模型,再根据模型内置的算法进行函数拟合,找到约束条件对应的参数,就实现了机器学习的过程:收集数据、处理数据、组织训练样本、选择模型、训练模型、验证和调优、用模型预测。
1.4.3 调试方法
从上述“人肉机器学习”的过程中可以看到,模型、参数和训练样本这3个要素对机器学习至关重要,对这3个要素进行调整就可以完成大部分模型的调试工作。
1.模型
如果把机器学习的算法模型比作大脑,模型就是大脑里的思维模式。认知世界的思维模式如果出现问题,很多事物我们就无法理解。这时就会去改变自己的思维模式,最终理解了一些对于初学者是新事物的东西,这个过程就完成了对大脑里思维模式的调试。
机器学习也是一样,不同的算法模型有不同的特点、不同的局限性。如果关注机器学习领域的读者,必定对卷积神经网络(CNN)有所耳闻,这是一个非常强大的机器视觉领域的算法模型,它可以逐像素、逐区域地提取图像特征(卷积),再利用神经网络进行建模,从而理解图像特征。但是,CNN有其局限性,卷积核设置过大,就会因为运算量过大而无法实际使用。就像人眼看到的图像,如果大脑处理不过来,就会产生VR晕动症。可以用转换器或其他模型替代CNN,再根据试验情况决定选用什么模型。这就像做前端开发过程中的技术选型一样,运用不同的技术,通过调试找到最适合解决问题的技术方案。
2.参数
调试过程中涉及的参数并不是前述模型记录的参数,而是训练模型的参数。训练模型的参数通常称为超参数,在机器学习中,超参数是在学习过程开始之前设置其值的参数。相反,其他参数的值是通过训练得出的。由于超参数的取值是无法通过训练模型得到的,即训练数据中不含有超参数取值的信息,因此,如何对超参数进行选择、调优就成了研究的重点。
在超参数优化方面,主要方法有:网格搜索(Grid Search),又称参数扫描,是超参数优化的传统方法,它仅仅对手动指定的模型的子集进行穷举搜索;随机搜索(Random Search),即在高维空间中简单地采样固定次数的参数设置的随机搜索;贝叶斯优化(Bayesian Optimization),这是噪声黑盒函数全局优化的一种方法。
关于超参数的选择、调优至今还没有明晰的方法,只是大概知道超参数对于模型的表现有很大影响,却不清楚具体是如何影响的。因此,算法工程师被戏称为炼丹师、调参工程师。
如果说超参数是针对机器学习算法模型初始化的参数,那么训练参数则是针对机器学习过程进行初始化的参数。训练参数包括如下几方面。
❑ 学习速率:模型太大的话,无法学到精髓;模型太小,则无法解决训练样本中没出现的问题(专业术语叫过拟合)。
❑ 批次大小:该参数与训练样本有关,太大或太小都不好,要让模型反复、随机、均匀地越过不同类型的训练样本为佳,但通常会对训练样本进行随机打散。
❑ 随机打散:该参数与批次大小相关联,为打散时使用的随机数,就像在写程序时生成随机数的Random Seed。
3.训练样本
训练样本就是收集和处理数据,在机器学习领域有一个专业名词叫“特征工程”。如果把“机器学习”比作日常生活中的“读书”,那么特征工程就是一种读书方法:好读书,读好书。“好读书”是指要经常读书,“读好书”是指读的书的内容质量要高。对于机器学习也是一样:“好读书”之于训练样本就是要求丰富性,训练样本充分才能训练出好模型;“读好书”之于训练样本就是要求高质量,高质量的训练样本才能让模型学习到精髓,而不会被噪声带偏。
在具体操作的时候,成熟的机器学习生态提供了大量的数据清洗、数据分析、特征提取、样本组织的工具和方法论,因此完全不用担心。PipCook这个为前端开发的开源系项目,就能够用JavaScript高性能、高质量地完成上述工作。
掌握了上述调试方法,基本就可以自己实现AI进行页面重构的过程,训练AI进行页面重构了。如果这个过程中遇到问题,还可以从3个方面进行调试和优化:选对模型,调好参数,组织高质量且丰富的训练样本。