我有一个关于机器学习的软件过程/架构设置的概念性问题。我有一个网络应用程序,我正在尝试合并一些机器学习算法,像Facebook的面部识别(除了一般的对象)。因此,模型可以更好地分类上传到我的服务中的特定图像(例如fb如何对特定人员进行分类等)。
粗略的轮廓是:
event: User uploads image; image attempts to be classified
if failure: draw a bounding box on object in image; return image
interaction: user tags object in box; send image back to server with tag
????: somehow this new image/label pair will fine tune the image classifier
我需要最后一步的帮助。通常,在转移学习或一般的培训中,程序员拥有一个充满图像的大型数据库。在我的情况下,我有一个预训练模型(谷歌的初始-v3),但我的微调数据库不存在,直到用户开始上传内容。
那么如何使用该标记方法来构建专门的数据库呢?我确定FB遇到了这个问题并解决了它,但我可以找到他们的解决方案。经过一番思考(以及不确定的研究),我能想到的唯一策略是:
A) stockpile tagged images and do a big batch train
B) somehow incrementally input a few tagged images as they get
uploaded, and slowly over days/weeks, specialize the image classifier.
理想情况下,我想避免使用选项A,但我不确定B是多么逼真,也不确定是否有其他方法可以完成此任务。谢谢!
答案 0 :(得分:2)
是的,这听起来像是online learning的典型例子。
特别是对于深度网络,给定一些新数据,例如,可以在其上运行几次随机梯度下降迭代。如果需要的话,调整学习率可能是一个好主意(这样可以调整给定样本的重要性,具体取决于一个人对它的信心)。 正如你所提到的,你也可以保存“迷你批次”来做到这一点(取决于你的设置)。
另外,如果您想让学习者(例如用户之间)更专业一点,请查看domain adaptation。