线性模型通过特征间的现行组合来表达“结果-特征集合”之间的对应关系。由于线性模型的表达能力有限,在实践中,只能通过增加“特征计算”的复杂度来优化模型。比如,在广告CTR预估应用中,除了“标题长度、描述长度、位次、广告id,cookie“等这样的简单原始特征,还有大量的组合特征(比如”位次-cookie“ 表示用户对位次的偏好)。事实上,现在很多搜索引擎的广告系统用的都是Logistic Regression模型(线性),而模型团队最重要的工作之一就是“特征工程 (feature engineering)”。

线性模型的思路是“简单模型+复杂特征”,用这样的组合实现复杂非线性场景描述。由于模型结构简单,这种做法的训练/预估计算代价相对较小;但是,特征的选取是一个需要耗费大量人力的工作,且要求相关人员对业务有较深的理解。

模型工作的另外一个思路是"复杂模型+简单特征“。即弱化特征工程的重要性,利用复杂的非线性模型来学习特征间的关系,增强表达能力。深度神经网络模型就是这样一个非线性模型。

【原创】深度神经网络(Deep Neural Network, DNN)-LMLPHP

上图是一个具有一个输入层,一个输出层,两个隐层的深度神经网路。该模型一个有9个节点。

神经网络的介绍很多文献都很详尽,现在以上图为例,重点讲一下backpropagation算法的推导过程。

backpropagation与梯度法非常相似,本质上是求每一个参数的偏导数,然后在偏导数的方向上寻找下一个搜寻点,以${W_{04}}$为例:

【原创】深度神经网络(Deep Neural Network, DNN)-LMLPHP

将上述推导合并,就可以得到${W_{04}}$的梯度方向:

【原创】深度神经网络(Deep Neural Network, DNN)-LMLPHP

其他迭代过程和梯度下降法差异不大。

值得注意的是,虽然DNN对特征工程的要求相对较低,但训练时间复杂度较大,切权重可解释性非常差,不易debug。因此,对于一个新的应用,比较好的方法是先用Logistic Regression这样的线性模型开始应用,等迭代成熟了,再尝试DNN模型。

04-14 00:37