【发布时间】:2018-09-27 03:19:25
【问题描述】:
对于标准机器学习问题,例如 MNIST 上的图像分类,损失函数是固定的,因此优化过程可以简单地通过调用函数并将输入输入其中来完成。无需手动推导梯度和编码下降过程。
但现在当我遇到一些复杂的公式时,我感到很困惑。假设我们正在解决一个半监督问题,损失函数有两部分:Ls + lambda * Lu。第一部分是正常的分类公式,例如交叉熵损失。第二部分各不相同。在我的情况下,Lu 是矩阵分解损失,具体为:Lu = MF(D, C * W)。而总损失函数可以写成:
L = \sum log p(yi|xi) + MF(D, C * W)
= \sum log p(yi|Wi) + MF(D, C * W)
= \sum log p(yi|T * Wi + b) + MF(D, C * W)
其中参数为W, C, T 和b。第一部分是分类损失,输入xi是W的原始值,即Wi,一个大小为(d, 1)的向量。而标签yi 可以是大小为(c, 1) 的单热向量,因此参数T 和b 将输入映射到标签大小。第二部分是矩阵分解损失。
现在,当我要使用 sgd 优化此功能时,我感到很困惑。它可以通过写下公式导出梯度然后从头开始完成训练过程来解决。但我想知道是否有更简单的方法?因为很容易使用 Tensorflow 或 Keras 等深度学习工具来训练分类模型,所以您需要做的就是建立一个网络并提供数据。
同样,在我定义了损失函数之后,有没有可以自动计算梯度的工具?因为派生渐变并从头开始实现它们真的很烦人。分类损失和矩阵分解损失都很常见,所以我认为可以彻底结合。
【问题讨论】:
标签: python optimization machine-learning tensorflow deep-learning