神经网络都是encoder-decoder的结构吗？decoder是不是就是用transformer将编程语言转换为可理解的结果呢？
很多人认为decoder就是类似于transformer的那种decoder做生成任务时才用到。其实不是的，你用一个cnn做文本分类时，最后是不是还要加个mlp或者其他分类头，再接个softmax。那个其实也是解码器。cnn就是你的encoder，是用来提取特征的，但是你不接个分类头无法将拿到的特征解码成你想要的类别。

基本上，所有的神经网络都是在做特征提取，包括cnn，rnn，bert，你无法直接使用这个模型后就直接得到你想要的结果，你只得到了一个embedding，也就是特征。这就意味着他们都是编码器，最后还是需要一个解码器，将特征解码成你想要的信息。

简单来说，你拿到cnn或者bert模型输出的结果，即使假设你不用加别的模型，你就看embedding里某个值就能知道应该是什么结果，这里面也有解码过程，只是你把这个解码过程简单化了，简单到你忽略了这也是一个解码的过程。

transformer需要比较强大的解码器的原因是因为它的解码任务比较难，需要自回归或者非自回归的生成一个序列，那么这样的难度必然需要更复杂，参数量更大的decoder，而分类任务只需要解码到一个类别判断的任务里，最终返回一个类别，解码器自然不需要特别强，大部分时候一个分类头即可。