CS231N assignment3-transformer,GAN,self-supervised,LSTM

这部分作业内容很大,上传到github费了很多时间,参考的是这篇:如何在GitHub上传大文件(≥100M) | 码农家园 (codenong.com)

但是还是没传成功···

所以我直接传到网盘里了

链接:https://pan.baidu.com/s/1T8Sc2Owq6OMtDSo5SNKlaA 
提取码:784w 
--来自百度网盘超级会员V2的分享

然后简单介绍一下作业3

1.RNN 在之前的博客写过了

2.transformer:

这部分作业完成的是decoder的部分,目标是为图片生成字幕。

步骤:

训练时将图片的feature(这里直接从它提供的cocodateset的utils中得到)作为cross-attention中的K,V。将captions+position embedding作为input,送入每一个decorder中,先进行mask-self-attention,resnet,ln再进行cross-attention,res,ln最后feedforwardNN,res,LN;

测试时由features和这个embedding产生caption.

PS:captions是原始word经过word_to_idx这个字典转化成独热编码,再用torch.nn.Embedding转化成连续的嵌入

3.GAN:

完成了三个版本的GAN,朴素版,最小二乘版,CNN版

总的思想就是完成一个判别器和一个生成器,用生成器从一些随机噪声开始生成图片,用判别器判别真实图片和来自生成器的图片,目标是最大化判别器判别真实图片为真的概率,最小化判别器判别由生成器产生的图为真的概率。

为了方便反向传播实现最小化损失函数,令L(discriminator)=-E[logD(x)]-E[log(1-D(G(z)))]

L(generator)=-E[logD(G(z))],用平均值替代期望

朴素GAN的判别器和生成器都由FC+激活层组成

最小二乘的判别器和生成器与朴素GAN相同,只是把损失函数变成预测值与真实样本预测值之间的距离了(缓解梯度消失/爆炸问题,生成器和判别器的能力差异很大时,梯度很容易消失。生成器和判别器的能力相近时,梯度很容易爆炸。 LSGAN通过引入最小二乘损失函数来缓解梯度消失或梯度爆炸的问题。最小二乘损失函数将生成器和判别器之间的对抗损失转化为一个回归问题,通过最小化生成器和判别器之间的均方差来进行训练。这种损失函数可以更好地稳定训练过程,减轻梯度消失或梯度爆炸的问题)

CNNGAN的判别器是由卷积层-relu-maxpool构成,生成器由反卷积层-relu-bn组成

4.自监督学习,完成的是一个simCLR(simple contrastive learning representation)对一个图片以两种策略生成两种图片变种,用f作为一个encoder(这里用的是resnet50),得到这两个图片的表示向量hi,hj,再将向量对送入g(一个小的神经网络,比如MLP)目标是最大化g(hi),g(hj)的一致性。将自监督学习模型应用于具体任务时,去掉g,改成FC等其他NN,完成任务。自监督学习相当于预训练,提取特征,学习特征。

损失函数是温度scaled交叉熵(使模型更关注于较大概率的类别,减小对较小概率类别的惩罚)

没搞懂的点:训练的时候用的是pairs(成对的数据)那test的时候是如何进行的?自监督有没有val? 感觉还是不太明白,等用的时候再回来仔细看看吧

5.LSTM:

在RNN,LSTM,ATTETION那篇博客写过,这里写一下在完成这个作业的时候的注意点:

分清是逐元素相乘* 还是矩阵点积运算@

tanx'=1-tanx²

sigmoid'=sigmoid(1-sigmoid)

虽然有cell state,但是最终还是把最后的hiddenstate送入映射层,再由softmax层得到损失。

不明白的地方:

为什么dnext_h = dh[:,t,:]+dprev_h?为什么要加上dprev_h?直觉上我可以理解,因为next_h除了由它本身以外还有prev_h,但是数学上不理解

你可能感兴趣的:(CS231N,transformer,生成对抗网络,lstm,自监督学习)