ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CS231n 2018 第三次作业全攻略:RNN/LSTM 图像字幕、网络可视化、风格迁移与 GAN 实战

CS231n 2018 第三次作业全攻略:RNN/LSTM 图像字幕、网络可视化、风格迁移与 GAN 实战 教程文档深度学习计算机视觉【免费下载链接】cs231n.github.ioPublic facing notes page项目地址https://gitcode.com/gh_mirrors/cs/cs231n.github.io点击查看免费下载本篇指南系统讲解 CS231n 2018 版第三次作业对应仓库文档 assignments/2018/assignment3.md的全部内容从环境配置、COCO 数据下载到用 Vanilla RNN 与 LSTM 实现 MS-COCO 图像字幕再到基于 ImageNet 预训练模型的网络可视化Saliency Maps / Fooling Images / Class Visualization、风格迁移以及用 GAN 生成逼真图像。读完本文你不仅能按部就班完成全部五个问题Q1~Q5并获得正确运行结果还能结合仓库内 rnn.md、understanding-cnn.md、generative-models.md 等讲义理解每个任务背后的数学原理与工程细节最后掌握 PDF 与 AFS 双通道提交的完整流程。一、作业总览五大问题与学习目标2018 版第三次作业围绕序列建模 生成模型 可解释性三大主题展开官方明确了如下学习目标原文档 Goals 部分理解循环神经网络RNN的架构以及它如何通过跨时间步共享权重来处理序列理解并实现Vanilla RNN与Long-Short Term MemoryLSTM网络理解如何结合卷积网络与循环网络构建图像字幕Image Captioning系统探索图像梯度的多种应用包括显著性图saliency maps、愚弄图像fooling images与类别可视化class visualizations理解并实现图像风格迁移style transfer技术理解并训练生成对抗网络GAN使其生成与数据集样本相似的图像。作业由五个问题构成分数分布如下问题主题分值Q1基于 Vanilla RNN 的图像字幕RNN_Captioning.ipynb25Q2基于 LSTM 的图像字幕LSTM_Captioning.ipynb30Q3网络可视化显著性图、类别可视化、愚弄图像15Q4风格迁移StyleTransfer-TensorFlow.ipynb/StyleTransfer-PyTorch.ipynb15Q5生成对抗网络GANS-TensorFlow.ipynb/GANS-PyTorch.ipynb15其中 Q3、Q4、Q5 均提供 TensorFlow 与 PyTorch 两个版本只需二选一完成同时完成两个版本不会获得额外加分No extra credit will be awarded。Q1 与 Q2 是纯 NumPy 实现属于所有选课学生都必须完成的基础环节。二、环境准备与数据下载2.1 获取代码与框架选型2018 版作业的启动代码打包在仓库内 assignments/2018/spring1718_assignment3.zip原文档同时给出了在线 zip 下载链接。官方特别注明Update 5/11/18该 zip 已更新确保包含正确的optim.py与layers.py文件——这两个文件是作业 1、2 中核心层的实现基础务必使用更新后的版本。根据你要完成的 notebook 类型需要提前安装对应深度学习框架TensorFlow 1.7按官方安装指引配置或PyTorch 0.4作业 2 说明中同样指出 PyTorch 0.4 于 2018 年 4 月 24 日发布可通过 conda 或 pip 安装。2.2 下载 COCO 字幕数据与预训练模型拿到启动代码后还需要下载三部分数据COCO 图像字幕数据、预训练 SqueezeNet 模型仅 TensorFlow 版本需要以及少量 ImageNet 验证图像。在assignment3目录下执行cd cs231n/datasets ./get_assignment3_data.sh该脚本会自动完成上述数据/模型的下载与解压。之后从assignment3目录启动 Jupyterjupyter notebook如果你在远程服务器如 Google Cloud上工作可参考仓库内 terminal-tutorial.md 与 setup.md 完成环境搭建对 IPython 不熟悉的读者可以参考仓库内的 jupyter-colab-tutorial.md 快速上手 notebook 的打开、运行、保存与导出流程。2.3 官方注意事项NotesNOTE 1Python 版本2018 版assignment3代码已在Python 3.6上完成测试其他 3.x 版本可能可用但官方不提供正式支持。搭建虚拟环境时必须使用正确的 Python 版本可通过两条命令确认(1) 激活 virtualenv(2) 运行which python查看实际指向的 Python。NOTE 2macOS 虚拟环境 matplotlib 问题如果在 OSX 虚拟环境中运行遇到 matplotlib 报错官方文档描述了相关 FAQ 问题可以使用assignment3目录下的start_ipython_osx.sh脚本替代jupyter notebook启动服务器。注意该脚本假定虚拟环境名为.env你可能需要按自己的 Python 版本与安装目录修改脚本内的变量。官方测试表明最新的 matplotlib 版本通常已不存在此问题。三、Q1基于 Vanilla RNN 的图像字幕25 分RNN_Captioning.ipynb将引导你从零实现一个基于Vanilla 循环网络的图像字幕系统数据集为MS-COCO。任务本质是一个one-to-many的序列生成问题输入一张定长图像输出一段描述内容的词序列。3.1 RNN 核心思想跨时间步共享权重仓库讲义 rnn.md 给出了 RNN 的统一视角RNN 本质是一个带内部状态的黑盒每处理一个时间步的输入就更新一次状态当我们按时间展开unroll模型后所有 RNN 块共享同一组参数只是每个时间步的输入与历史不同。更精确地说RNN 可以写成带参数 $W$ 的递推函数$$ h_t f_W(h_{t-1}, x_t) $$每一步接收上一时刻状态 $h_{t-1}$ 与当前输入 $x_t$产出当前状态 $h_t$。因为每一时间步都应用同一个固定函数所以 RNN 无需预先承诺序列长度可以处理任意长度的输入输出序列——这正是卷积网络难以做到的地方ConvNet 只能接受固定宽高的输入无法泛化到可变长度序列如不同帧数视频的字幕生成。3.2 Vanilla RNN 递推公式Vanilla RNN 是最简单的循环单元仅含单一隐状态 $h$递推公式为$$ h_t \tanh(W_{hh}h_{t-1} W_{xh}x_t) $$其中 $W_{hh}$、$W_{xh}$ 分别将上一时间步隐状态 $h_{t-1}$ 与当前输入 $x_t$ 投影到隐空间求和后用 $\tanh$ 压缩得到新状态。在隐状态之上再做一次矩阵投影即可得到输出$$ y_t W_{hy}h_t $$在图像字幕场景中$x_t$ 是词向量的嵌入表示$h_t$ 是对已生成词序列的压缩编码$y_t$ 是对词汇表所有词的打分logits经 softmax 后采样出下一个词。训练时每个时间步都有真实的下一个词作为目标损失如 softmax 交叉熵沿计算图反向传播得到各权重矩阵的梯度并更新。3.3 在作业中需要实现的点Q1 的作业代码要求你手动实现 RNN 的前向与反向传播rnn_forward/rnn_backward、时间步展开rnn_step_forward/backward以及完整的图像字幕训练循环最终在 COCO 验证集上生成字幕并与参考字幕比较通常用 BLEU 等指标。这一步的关键是把 rnn.md 中 one-to-many 架构落实到cs231n/rnn层的 NumPy 实现中并验证梯度正确性与数值梯度对比。四、Q2基于 LSTM 的图像字幕30 分LSTM_Captioning.ipynb要求实现Long-Short Term Memory单元并应用于 MS-COCO 字幕。LSTM 是本期作业分值最高的问题也是实践中真正被广泛使用的循环单元。4.1 为什么需要 LSTMVanilla RNN 的梯度消失问题讲义 rnn.md 推导了 Vanilla RNN 的梯度链末时间步损失 $L_t$ 对 $W_{hh}$ 的梯度为$$ \frac{\partial L_{t}}{\partial W_{hh}} \frac{\partial L_{t}}{\partial h_{t}} \left(\prod_{t2}^{T} \tanh(W_{hh}h_{t-1} W_{xh}x_t)W_{hh}^{T-1}\right)\frac{\partial h_{1}}{\partial W_{hh}} $$梯度消失$\tanh(\cdot)$ 几乎恒小于 1tanh 输出在 -1 到 1 之间因此时间步越长连乘使梯度趋于 0早期时间步几乎收不到来自未来损失的更新长序列建模变得极其缓慢梯度爆炸若移除非线性后 $W_{hh}$ 的最大奇异值大于 1梯度会指数放大常导致梯度中出现 NaN最大奇异值小于 1 则再次退化为梯度消失。实践中梯度爆炸可用**梯度裁剪gradient clipping**缓解但梯度消失依然存在这正是 LSTM 被设计出来要解决的问题。4.2 LSTM 公式与三个门LSTM 在隐状态 $h_t$ 之外引入细胞状态 $c_t$两者均为 $n$ 维向量$c_t$ 可被直观理解为存储长期信息的记忆线。LSTM 通过三个门均为 $n$ 维、取值 0~1读、擦、写 $c_t$$$ \begin{aligned} f_t \sigma(W_{hf}h_{t-1} W_{xf}x_t) \ i_t \sigma(W_{hi}h_{t-1} W_{xi}x_t) \ o_t \sigma(W_{ho}h_{t-1} W_{xo}x_t) \ g_t \tanh(W_{hg}h_{t-1} W_{xg}x_t) \ c_t f_t \odot c_{t-1} i_t \odot g_t \ h_t o_t \odot \tanh(c_t) \end{aligned} $$其中 $\odot$ 为逐元素 Hadamard 乘积$\sigma$ 为 sigmoid输出 0~1充当开关。三门语义如下遗忘门 $f_t$控制从上一细胞状态 $c_{t-1}$ 中删除多少信息输入门 $i_t$控制从 $h_{t-1}$ 与 $x_t$ 中写入多少新信息到 $c_t$与候选值 $g_t$ 相乘输出门 $o_t$控制从细胞状态中展示多少信息作为当前隐状态 $h_t$。4.3 细胞状态高速公路与梯度流畅LSTM 的关键设计是细胞状态这条横穿时间步的高速公路$c_t f_t \odot c_{t-1} i_t \odot g_t$ 只有少量线性交互信息很容易沿此通道原样流动。因此即使多层 LSTM 堆叠梯度也可以沿细胞状态反向传播而不在每个时间步衰减——例如当遗忘门设为 1、输入门设为 0 时细胞状态信息可以跨越许多时间步被完整保留。需要强调的是LSTM 并不保证彻底消除梯度消失/爆炸但它让模型更容易学到长距离依赖。Q2 作业要求你实现 LSTM 前向/反向lstm_forward/backward、lstm_step_forward/backward并将其接入与 Q1 相同的字幕训练框架比较 Vanilla RNN 与 LSTM 在 COCO 上的字幕质量差异。五、Q3网络可视化——显著性图、类别可视化与愚弄图像15 分NetworkVisualization-TensorFlow.ipynb与NetworkVisualization-PyTorch.ipynb引入预训练 SqueezeNet 模型并计算图像梯度来生成显著性图与愚弄图像只完成其中一个 notebook。5.1 数据梯度与显著性图讲义 understanding-cnn.md 将数据梯度列为关键可视化手段对输入图像计算类别得分关于图像的梯度梯度绝对值大的像素区域对分类决策贡献最大叠加后即得saliency map。该方法对应 Deep Inside Convolutional Networks 中提出的显著性可视化是理解模型看到了什么的最直接方式。作业中你会从 ImageNet 验证图像出发用 SqueezeNet 前向 反向得到逐像素梯度并可视化高亮区域。5.2 愚弄图像Fooling Images愚弄图像是反向使用图像梯度固定网络权重沿使目标类别得分上升的方向修改输入图像让一张原本被正确分类的图片经过小幅扰动后被误分类为任意指定类别。这与讲义中引述的对抗样本研究Explaining and Harnessing Adversarial Examples 等一脉相承作业中你会实际构造这样的扰动并观察其幅度与效果。5.3 类别可视化Class Visualization对某一目标类别随机初始化一张图像并持续沿梯度上升可还原出网络认为最能代表该类的模式。理解其局限也很重要ReLU 神经元本身未必有独立语义多个神经元更像某个图像块表示空间的基向量对网络表示空间做任意旋转并不改变其行为因此可视化展示的是表示云边缘沿权重轴方向的内容understanding-cnn.md 中亦讨论了这一观点。六、Q4风格迁移15 分StyleTransfer-TensorFlow.ipynb/StyleTransfer-PyTorch.ipynb教你创建内容来自一张图、风格来自另一张图的合成图像只完成其中一个 notebook。风格迁移的核心思路是同时优化一张合成图像使其在内容特征上与内容图接近、在风格特征上与风格图接近内容损失比较合成图与内容图在预训练网络某层激活特征CNN codes的差异约束合成图保留内容图的物体结构风格损失以特征图的 Gram 矩阵各通道激活间的二阶统计量度量风格纹理约束合成图与风格图在各层 Gram 矩阵差异最小总损失为内容损失与风格损失的加权和对输入像素做梯度下降迭代更新合成图。作业中你将使用预训练 SqueezeNet 提取多层特征调节内容/风格权重与迭代步数观察输出在保内容与显风格之间的权衡。作为背景讲义 understanding-cnn.md 介绍了 CNN 特征的多层可视化与激活/滤波器分析方法可帮助你理解深层特征即内容语义、浅层统计即风格纹理这一直觉。七、Q5生成对抗网络15 分GANS-TensorFlow.ipynb/GANS-PyTorch.ipynb要求训练 GAN 生成与训练集匹配的图像并进一步用大量无标签数据 少量有标签数据提升分类器性能半监督学习设定。只完成其中一个 notebook。7.1 GAN 的对抗式目标仓库讲义 generative-models.md 给出了完整推导。GAN 的目标是训练一个生成器网络将易采样的简单分布随机噪声 $z$映射到训练数据所在的高维分布由于不显式建模数据密度 $p(x)$无法用监督重建损失训练因此引入判别器网络做二分类——判断输入图像来自真实数据还是生成器伪造。二者构成 min-max 对抗博弈$$ \min_{\theta_g} \max_{\theta_d} \Big{\mathbb{E}{x \sim p{\mathrm{data}}}\big[\log D_{\theta_d}(x)\big] \mathbb{E}_{z \sim p(z)}\big[\log\big(1 - D_{\theta_d}(G_{\theta_g}(z))\big)\big]\Big} $$判别器最大化目标让真实图 $D(x)$ 趋近 1、伪造图 $D(G(z))$ 趋近 0生成器最小化目标让伪造图 $D(G(z))$ 趋近 1即骗过判别器。7.2 训练技巧与改进目标讲义指出直接最小化 $\log(1 - D(G(z)))$ 存在缺陷当样本明显是假的$D(G(z))$ 很小时该目标导数也很小训练初期生成器更新缓慢反之样本已经逼真时梯度反而大。为此实际训练采用**最大化判别器犯错的对数似然**这一改进目标$$ \max_{\theta_g} \mathbb{E}_{z \sim p(z)}\big[\log D_{\theta_d}(G_{\theta_g}(z))\big] $$目标函数等价但梯度信号更强尤其对判别器眼中仍很假的样本提供更大更新幅度。标准训练流程讲义伪代码为每个训练迭代内先采样小批量噪声 ${z^{(1)},\dots,z^{(m)}}$ 与真实样本 ${x^{(1)},\dots,x^{(m)}}$对判别器做 $k$ 步梯度上升$k \geq 1$ 为超参数无通用最优值随后再采样噪声批量对生成器做梯度上升。GAN 训练在实践中有名的困难后续 Wasserstein GAN、BEGAN 等改进了训练稳定性讲义Other Variants一节有系统梳理。7.3 DCGAN 架构建议为获得更好的图像质量与训练稳定性讲义总结了 DCGAN 的架构要点判别器用步长卷积strided convolutions替代池化生成器用分数步长卷积fractional-strided convolutions生成器与判别器均使用batchnorm更深架构中移除全连接隐层生成器除输出层用 Tanh外全部使用ReLU激活判别器各层使用LeakyReLU激活。DCGAN 在 LSUN 卧室数据集上可生成高分辨率高质量图像而不记忆训练样本。此外GAN 学习到的潜空间具有结构对潜变量 $z$ 做插值可见平滑语义变化对 $z$ 向量做算术如取均值可得到符合语义的稳定生成而同样的算术在像素空间执行只会因错位产生噪声叠加——这佐证了潜空间表示的价值。八、提交作业PDF 与 AFS 双通道2018 版提交分为两步缺一不可第 1 步提交已运行的 notebook PDF 到 Gradescope课程编号 17367选课后会自动加入。先将每个.ipynb转为 HTMLjupyter nbconvert --to html FILE.ipynb其中FILE.ipynb为要转换的 notebook 文件名。随后用浏览器把 HTML 存为 PDF再用 PDF 阅读器合并为单个文件上传 Gradescope 并正确标注各题对应页面。重要提交的 notebook 必须已经运行过且单元格输出可见。第 2 步提交 zip 到 Stanford AFS。在作业目录运行提供的collectSubmission.sh脚本生成assignment3.zip然后 SCP 到 AFS# Run from the assignment directory where the zip file is located scp assignment3.zip YOUR_SUNETmyth.stanford.edu:~/DEST_PATHYOUR_SUNET替换为你的 SUNetID如jdoeDEST_PATH是 AFS 上已存在的目标目录。随后 SSH 登录 Myth 机器并执行提交脚本# SSH into the Stanford Myth machines ssh YOUR_SUNETmyth.stanford.edu # Descend into the directory where the zip file is now located cd DEST_PATH # Run the script to actually submit the assignment /afs/ir/class/cs231n/submit按屏幕提示完成提交成功后脚本会输出SUBMIT SUCCESS消息。九、仓库内配套学习资源本仓库作为课程公开讲义仓库为本次作业提供了配套理论文档建议按需查阅rnn.mdRNN 架构类型、Vanilla RNN 递推、字符级语言模型示例、多层 RNN、LSTM 公式与梯度消失/爆炸推导直接支撑 Q1/Q2understanding-cnn.md激活与滤波器可视化、数据梯度、DeconvNet、Guided Backpropagation、愚弄 ConvNet 等可视化方法论直接支撑 Q3generative-models.mdPixelRNN/PixelCNN、VAE 与 GAN 的完整目标函数推导、训练伪代码、DCGAN 架构建议直接支撑 Q5setup.md、terminal-tutorial.md、jupyter-colab-tutorial.md环境搭建与 notebook 使用指南assignments/2018/spring1718_assignment3.zip2018 版作业启动代码含正确的optim.py与layers.py。按上述顺序依次完成 Q1→Q5配合讲义理解公式与动机即可完整拿下 2018 版第三次作业的全部 100 分2530151515并顺带掌握 RNN/LSTM、可解释性、风格迁移与生成模型这四大现代深度学习核心技能。赞分享教程文档深度学习计算机视觉【免费下载链接】cs231n.github.ioPublic facing notes page项目地址https://gitcode.com/gh_mirrors/cs/cs231n.github.io点击查看免费下载相关推荐使用 Amazon SQS 构建 Orleans 持久化流队列配置、FIFO 顺序保证与自定义数据适配器实战指南使用 Amazon SQS 构建 Orleans 持久化流队列配置、FIFO 顺序保证与自定义数据适配器实战指南 导读 本文基于 Orleans 官方文档 S教程文档深度学习计算机视觉CS231n 2019 Assignment 3 实战指南RNN/LSTM 图像描述、网络可视化、风格迁移与 GAN 实现CS231n 2019 Assignment 3 实战指南RNN/LSTM 图像描述、网络可视化、风格迁移与 GAN 实现 本篇指南围绕 CS231nSta教程文档深度学习计算机视觉CS231n 2017 Assignment 3 全解析RNN/LSTM 图像描述、网络可视化、风格迁移与生成对抗网络实战CS231n 2017 Assignment 3 全解析RNN/LSTM 图像描述、网络可视化、风格迁移与生成对抗网络实战 本篇指南完整解析 Stanford教程文档深度学习计算机视觉上一篇10个最常见的Bootstrap 5.3错误及快速修复方案从入门到精通下一篇Files性能优化指南让你的文件管理飞起来创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表