\begin{tikzpicture} \begin{scope} \tikzstyle{rnnnode} = [minimum height=1.1em,minimum width=2.1em,inner sep=2pt,rounded corners=1pt,draw,fill=red!20]; \node [rnnnode,anchor=west] (h1) at (0,0) {\tiny{$\textbf{h}_1$}}; \node [anchor=west] (h2) at ([xshift=1em]h1.east) {\tiny{...}}; \node [rnnnode,anchor=west] (h3) at ([xshift=1em]h2.east) {\tiny{$\textbf{h}_m$}}; \node [rnnnode,anchor=north,fill=green!20] (e1) at ([yshift=-1em]h1.south) {\tiny{$e_x()$}}; \node [anchor=west] (e2) at ([xshift=1em]e1.east) {\tiny{...}}; \node [rnnnode,anchor=west,fill=green!20] (e3) at ([xshift=1em]e2.east) {\tiny{$e_x()$}}; \node [anchor=north,inner sep=2pt] (w1) at ([yshift=-0.6em]e1.south) {\tiny{你}}; \node [anchor=north,inner sep=2pt] (w2) at ([yshift=-0.8em]e2.south) {\tiny{...}}; \node [anchor=north,inner sep=2pt] (w3) at ([yshift=-0.6em]e3.south) {\tiny{$\langle$eos$\rangle$}}; \draw [->] (w1.north) -- ([yshift=-0.1em]e1.south); \draw [->] (w3.north) -- ([yshift=-0.1em]e3.south); \draw [->] ([yshift=0.1em]e1.north) -- ([yshift=-0.1em]h1.south); \draw [->] ([yshift=0.1em]e3.north) -- ([yshift=-0.1em]h3.south); \draw [->] ([xshift=0.1em]h1.east) -- ([xshift=-0.1em]h2.west); \draw [->] ([xshift=0.1em]h2.east) -- ([xshift=-0.1em]h3.west); \draw [->] ([xshift=-0.8em]h1.west) -- ([xshift=-0.1em]h1.west) node [pos=0,left,inner sep=2pt] {\tiny{0}}; \node [anchor=south] (encoder) at ([xshift=-0.2em]h1.north west) {\scriptsize{\textbf{编码器}}}; { \node [rnnnode,anchor=west,fill=green!20] (t1) at ([xshift=3em]h3.east) {\tiny{$e_y()$}}; } { \node [rnnnode,anchor=west,fill=green!20] (t2) at ([xshift=1.5em]t1.east) {\tiny{$e_y()$}}; } { \node [rnnnode,anchor=west,fill=green!20] (t3) at ([xshift=1.5em]t2.east) {\tiny{$e_y()$}}; \node [rnnnode,anchor=west,fill=green!20] (t4) at ([xshift=1.5em]t3.east) {\tiny{$e_y()$}}; \node [anchor=west,inner sep=2pt] (t5) at ([xshift=0.3em]t4.east) {\tiny{...}}; } { \node [rnnnode,anchor=south] (s1) at ([yshift=1em]t1.north) {\tiny{$\textbf{s}_1$}}; } { \node [rnnnode,anchor=south] (s2) at ([yshift=1em]t2.north) {\tiny{$\textbf{s}_2$}}; } { \node [rnnnode,anchor=south] (s3) at ([yshift=1em]t3.north) {\tiny{$\textbf{s}_3$}}; \node [rnnnode,anchor=south] (s4) at ([yshift=1em]t4.north) {\tiny{$\textbf{s}_4$}}; \node [anchor=west,inner sep=2pt] (s5) at ([xshift=0.3em]s4.east) {\tiny{...}}; } { \node [rnnnode,anchor=south,fill=blue!20] (o1) at ([yshift=1em]s1.north) {\tiny{Softmax}}; \node [anchor=east] (decoder) at ([xshift=-0.5em]o1.north west) {\scriptsize{\textbf{解码器}}}; } { \node [rnnnode,anchor=south,fill=blue!20] (o2) at ([yshift=1em]s2.north) {\tiny{Softmax}}; } { \node [rnnnode,anchor=south,fill=blue!20] (o3) at ([yshift=1em]s3.north) {\tiny{Softmax}}; \node [rnnnode,anchor=south,fill=blue!20] (o4) at ([yshift=1em]s4.north) {\tiny{Softmax}}; \node [anchor=west,inner sep=2pt] (o5) at ([xshift=0.3em]o4.east) {\tiny{...}}; } { \node [anchor=north,inner sep=2pt] (wt1) at ([yshift=-0.6em]t1.south) {\tiny{$\langle$sos$\rangle$}}; } { \node [anchor=north,inner sep=2pt] (wt2) at ([yshift=-0.6em]t2.south) {\tiny{Have}}; } { \node [anchor=north,inner sep=2pt] (wt3) at ([yshift=-0.8em]t3.south) {\tiny{you}}; \node [anchor=north,inner sep=2pt] (wt4) at ([yshift=-0.6em]t4.south) {\tiny{learned}}; } { \node [anchor=center,inner sep=2pt] (wo1) at ([yshift=1.2em]o1.north) {\tiny{Have}}; } { \node [anchor=south,inner sep=2pt] (wos1) at (wo1.north) {\tiny{\textbf{[step 1]}}}; } { \node [anchor=center,inner sep=2pt] (wo2) at ([yshift=1.2em]o2.north) {\tiny{you}}; } { \node [anchor=south,inner sep=2pt] (wos2) at (wo2.north) {\tiny{\textbf{[step 2]}}}; } { \node [anchor=center,inner sep=2pt] (wo3) at ([yshift=1.2em]o3.north) {\tiny{learned}}; \node [anchor=south,inner sep=2pt] (wos3) at (wo3.north) {\tiny{\textbf{[step 3]}}}; \node [anchor=center,inner sep=2pt] (wo4) at ([yshift=1.2em]o4.north) {\tiny{nothing}}; \node [anchor=south,inner sep=2pt] (wos4) at (wo4.north) {\tiny{\textbf{[step 4]}}}; } { \foreach \x in {1}{ \draw [->] ([yshift=-0.7em]t\x.south) -- ([yshift=-0.1em]t\x.south); \draw [->] ([yshift=0.1em]t\x.north) -- ([yshift=-0.1em]s\x.south); \draw [->] ([yshift=0.1em]s\x.north) -- ([yshift=-0.1em]o\x.south); \draw [->] ([yshift=0.1em]o\x.north) -- ([yshift=0.8em]o\x.north) node [pos=0.5,right] {\tiny{top1}}; } } { \foreach \x in {2}{ \draw [->] ([yshift=-0.7em]t\x.south) -- ([yshift=-0.1em]t\x.south); \draw [->] ([yshift=0.1em]t\x.north) -- ([yshift=-0.1em]s\x.south); \draw [->] ([yshift=0.1em]s\x.north) -- ([yshift=-0.1em]o\x.south); \draw [->] ([yshift=0.1em]o\x.north) -- ([yshift=0.8em]o\x.north) node [pos=0.5,right] {\tiny{top1}}; } } { \foreach \x in {3,4}{ \draw [->] ([yshift=-0.7em]t\x.south) -- ([yshift=-0.1em]t\x.south); \draw [->] ([yshift=0.1em]t\x.north) -- ([yshift=-0.1em]s\x.south); \draw [->] ([yshift=0.1em]s\x.north) -- ([yshift=-0.1em]o\x.south); \draw [->] ([yshift=0.1em]o\x.north) -- ([yshift=0.8em]o\x.north) node [pos=0.5,right] {\tiny{top1}}; } } { \draw [->] ([xshift=-0.8em]s1.west) -- ([xshift=-0.1em]s1.west) node [pos=0,left] {\tiny{0}}; } { \draw [->] ([xshift=0.1em]s1.east) -- ([xshift=-0.1em]s2.west); } { \draw [->] ([xshift=0.1em]s2.east) -- ([xshift=-0.1em]s3.west); \draw [->] ([xshift=0.1em]s3.east) -- ([xshift=-0.1em]s4.west); } { \draw [->,thick,dotted] (wo1.east) .. controls +(east:1.0) and +(west:1.0) ..(wt2.west); } { \draw [->,thick,dotted] (wo2.east) .. controls +(east:1.3) and +(west:1.1) ..(wt3.west); \draw [->,thick,dotted] (wo3.east) .. controls +(east:0.9) and +(west:0.9) ..(wt4.west); } { \node [circle,draw,anchor=south,inner sep=3pt,fill=orange!20] (c2) at ([yshift=2em]h2.north) {\tiny{$\textbf{C}_2$}}; \node [anchor=south] (c2label) at (c2.north) {\tiny{\textbf{注意力机制:上下文}}}; \node [anchor=south] (c2more) at ([yshift=-1.5em]c2.south) {\tiny{...}}; \draw [->] (h1.north) .. controls +(north:0.6) and +(250:0.9) .. (c2.250); \draw [->] (h3.north) .. controls +(north:0.6) and +(290:0.9) .. (c2.290); \draw [->] ([yshift=-0.3em]s1.west) .. controls +(west:2) and +(-50:0.3) .. (c2.-40); } { \draw [->] (c2.0) -- ([xshift=1.2in]c2.0) -- ([yshift=0.3em,xshift=-1.2em]s2.west) -- ([yshift=0.3em,xshift=-0.1em]s2.west); } { \node [circle,draw,anchor=north,inner sep=3pt,fill=orange!20] (c3) at ([yshift=-2em]t2.south) {\tiny{$\textbf{C}_3$}}; \draw [->] ([xshift=-0.7em]c3.west) -- ([xshift=-0.1em]c3.west); \draw [->] ([xshift=0.1em]c3.east) .. controls +(east:0.6) and +(west:0.8) ..([yshift=-0.3em,xshift=-0.1em]s3.west); } { \node [circle,draw,anchor=north,inner sep=3pt,fill=orange!20] (c4) at ([yshift=-2em]t3.south) {\tiny{$\textbf{C}_4$}}; \draw [->] ([xshift=-0.7em]c4.west) -- ([xshift=-0.1em]c4.west); \draw [->] ([xshift=0.1em]c4.east) .. controls +(east:0.6) and +(west:0.8) ..([yshift=-0.3em,xshift=-0.1em]s4.west); } \end{scope} \end{tikzpicture}