\parinterval{\small\sffamily\bfseries{转置}}(transpose)是矩阵的重要操作之一。矩阵的转置可以看作是将矩阵以对角线为镜像进行翻转:假设$\mathbf a $为$ m $行$ n $列的矩阵,第$ i $行第$ j $列的元素是$ a_{ij}$,即:$\mathbf a={(a_{ij})}_{m\times n}$,把$ m\times n $矩阵$\mathbf a $的行换成同序数的列得到一个$ n\times m $矩阵,则得到$\mathbf a $的转置矩阵,记为$\mathbf a^{\rm T}$,其中$ a_{ji}^{\rm T}=a_{ij}$。例如:
\parinterval{\small\sffamily\bfseries{转置}}(transpose)是矩阵的重要操作之一。矩阵的转置可以看作是将矩阵以对角线为镜像进行翻转:假设$\mathbf a $为$ m $行$ n $列的矩阵,第$ i $行第$ j $列的元素是$ a_{ij}$,即:$\mathbf a={(a_{ij})}_{m\times n}$,把$ m\times n $矩阵$\mathbf a $的行换成同序数的列得到一个$ n\times m $矩阵,则得到$\mathbf a $的转置矩阵,记为$\mathbf a^{\rm T}$,其中$ a_{ji}^{\rm T}=a_{ij}$。例如:
\parinterval 那激活函数又是什么?神经元在接收到经过线性变换的结果后,通过激活函数的处理,得到最终的输出$\mathbf y $。激活函数的目的是解决实际问题中的非线性变换,线性变换只能拟合直线,而激活函数的加入,使神经网络具有了拟合曲线的能力。 特别是在实际问题中,很多现象都无法用简单的线性关系描述,这时激活函数的非线性就为我们描述更加复杂的问题提供了工具。
\noindent 其中,$\mathbf h_t $表示$ t $时刻循环单元的输出,$\mathbf h_{t-1}$表示$ t-1$时刻循环单元的输出,$\mathbf U $和$\mathbf W $是模型的参数。可以看出,循环单元的结构其实很简单,只是一个对$\mathbf h_{t-1}$和$\mathbf x_t $的线性变换再加上一个tanh函数。通过读入上一时刻的输出,当前时刻可以访问以前的历史信息。这个过程可以循环执行,这样就完成了对所有历史信息的建模。$\mathbf h_t $可以被看作是序列在$ t $时刻的一种表示,也可以被看作是网络的一个隐藏层。进一步,$\mathbf h_t $可以被送入输出层,得到$ t $时刻的输出:
\parinterval GPT模型仍然使用标准的语言建模的思路,即通过前$ n-1$个词预测第$ n $个词。但是在网络结构上,GPT模型使用了Transformer(图\ref{fig:gpt}),而且模型参数会在目标任务上进行有监督的微调。与ELMO模型的做法不同,GPT不需要对目标任务构建新的模型结构,而是直接在Transformer语言表示模型的最后一层加上softmax层作为任务的输出层。实验结果证明,GPT模型的性能较ELMO模型更为优越,在12个NLP任务中取得了9个任务当时最好的结果。
\parinterval GPT模型仍然使用标准的语言建模的思路,即通过前$ n-1$个词预测第$ n $个词。但是在网络结构上,GPT模型使用了Transformer(图\ref{fig:gpt}),而且模型参数会在目标任务上进行有监督的微调。与ELMO模型的做法不同,GPT不需要对目标任务构建新的模型结构,而是直接在Transformer语言表示模型的最后一层加上Softmax层作为任务的输出层。实验结果证明,GPT模型的性能较ELMO模型更为优越,在12个NLP任务中取得了9个任务当时最好的结果。