作业总结
终于来到了最后一次作业,这次主要是讲 RNN 或 LSTM 这个时序模型,感觉如果公式已经熟悉了的话(没有的话多看几遍,也可以参考我上篇博文的公式总结,囧),作业应该比上次的简单。代码量也少一些。在写代码之前要下载一些必要的模型文件,数据集等,可能比上两次麻烦点,具体看 Assignment #3 的说明就好了。
我的作业代码见:cs231n/assignment3.
Image Caption
这次的作业内容是从 Image Caption 这个问题入手,即给定一张图片,生成对图片的文字描述。下图就是 Google NIC 模型的示意图,流程已经很清晰了。大概的做法是这样的,用一个预训练的 CNN 把图片提取特征,然后那这个特征初始化 RNN(LSTM) 的 hidden state,用 RNN(LSTM) 生成一句话。这里的 CNN 主要就是一个 encoder,负责把图片压缩成一个语义向量,而 RNN(LSTM) 则是一个 decoder,也是一个语言模型(language model),负责从这个语义向量解码出自然语言。
这门课的作者 Karpathy 在这个课题上曾做了很多工作,可以参考项目主页 Deep Visual-Semantic Alignments for Generating Image Descriptions
RNN
前面 RNN_Captioning.ipynb 主要是完成 RNN & LSTM 以及 word embedding 的 forward 和 backward 操作,见 cs231n/rnn_layers.py 文件。
这里再贴一下 RNN 的示意图:
RNN 的 step_forward 公式很简单,
RNN 的 forward 是要用 for 循环按照序列时序展开的,每个时刻 t 接收对应的输入 xt ,和上时刻隐层的激活值(hidden state) ht−1 ,得到此时刻的 hidden state 值