思考:当我们习惯性的使用封装好的深度学习框架时,是否想过探寻他们调用函数背后的意义,也就是他的实现逻辑?如果封装不公开源码,那你是否留意过调用函数时,输入的参数?今天来看看,一个比较容易忽略的点:损失函数。不知道为何,想到损失函数的时候,脑子里出现了Sigmod函数的输出,某个灵感一闪而过,缺没有抓住。回去巴拉巴拉网络结构,发现:论文中没注意损失函数形式,网络搭建时,也没有特别留意损失函数的设置,粗心真的可怕..
loss(name='logloss', loss_type='logistic', inputs=[fc_out.name])
主要内容:
1.先来看几个深度网络的损失函数
2.为什么是这个损失函数,这个损失函数的优势
3.对于0-1标签的模型,这个损失函数怎么理解,网络的预测值代表什么意义?跟标签怎么对应?
几个常见深度网络的损失函数
PNN的损失函数:log loss,广泛用于捕捉两个概率分布的差异(翻译的优点别扭)。
DCN的损失函数:
DIN的损失函数:
为什么是这个损失函数,这个损失函数的优势
这几个网络的损失函数都为logloss,y^是预测结果,可以看出是sigmod函数的输出,映射到(0, 1)之间,表示为ctr,预测为正例的概率,联想到逻辑回归,事件发生的概率为p,对数几率函数:log(p/(1-p)),化简得到wx+b,关于输入的线性回归,也就是说,wx+b的值越大,概率值越接近于1,越小概率值越接近于0。那我们优化的目标就是:正例概率最大化。如果一个样本看做一个事件的话,时间发生的概率,让这个概率最大,这是似然函数,用极大释然估计方法估计模型参数。
其实这个问题中也包含的解答了第三个问题。
参考:
李航老师的统计机器学习p78-79.