<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Transformer on Rui's Blog</title><link>https://low-hands.github.io/posts/transformer/</link><description>Recent content in Transformer on Rui's Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 27 Jan 2026 16:49:00 -0800</lastBuildDate><atom:link href="https://low-hands.github.io/posts/transformer/index.xml" rel="self" type="application/rss+xml"/><item><title>LSTM</title><link>https://low-hands.github.io/posts/transformer/models/lstm/</link><pubDate>Tue, 27 Jan 2026 16:49:00 -0800</pubDate><guid>https://low-hands.github.io/posts/transformer/models/lstm/</guid><description>&lt;p&gt;pending&lt;/p&gt;</description></item><item><title>RNN</title><link>https://low-hands.github.io/posts/transformer/models/rnn/</link><pubDate>Mon, 26 Jan 2026 23:57:00 -0800</pubDate><guid>https://low-hands.github.io/posts/transformer/models/rnn/</guid><description>&lt;h1 id="结构"&gt;结构&lt;/h1&gt;
&lt;p&gt;&lt;img src="https://low-hands.github.io/posts/transformer/models/rnn/structure.png" alt="structure"&gt;
纵向看，每一列相当于一个小的传统神经网络&lt;/p&gt;
&lt;p&gt;x：输入层，长度为word embedding的维度&lt;/p&gt;
&lt;p&gt;U：输入层到隐藏层的权重&lt;/p&gt;
&lt;p&gt;s：隐藏层 = f(U * xt + W * s(t-1) + bias),即输入层的计算结果加上上一时刻的结果乘上一个权重W&lt;/p&gt;
&lt;p&gt;V: 隐藏层到输出层的权重&lt;/p&gt;
&lt;p&gt;o：输出 = softmax(V * st + bias)&lt;/p&gt;
&lt;h1 id="注意"&gt;注意&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;由公式可见，每个隐藏层s的值不仅依赖于当前时刻的输入，而且依赖于&lt;strong&gt;上一个时刻的的结果s(t-1)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;U,V,W都是共享的&lt;/li&gt;
&lt;li&gt;不一定每一个时刻都要有一个输出，也就是说不是每一个小神经网络都必须有输出，它可以是不完整的&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="举例"&gt;举例&lt;/h1&gt;
&lt;p&gt;&lt;img src="https://low-hands.github.io/posts/transformer/models/rnn/8397aaf6-1669-46b3-8465-791ed748404f.png" alt="example"&gt;&lt;/p&gt;
&lt;p&gt;这是一个时间序列做预测的例子，一共有三天的数据，预测明天的数据&lt;/p&gt;
&lt;p&gt;w1 = U = 1.8， w2 = W = -0.5，w3 = V = 1.1&lt;/p&gt;
&lt;p&gt;x0 = 1, x1 = 0.5, x2 = 0.5
这里的输入只是数字而不是向量&lt;/p&gt;
&lt;h2 id="day0"&gt;Day0&lt;/h2&gt;
&lt;p&gt;s0 = f(1.8 * 1 + -0.5 * 0) = f(1.8) = 1.8&lt;/p&gt;</description></item><item><title>Tokenizer</title><link>https://low-hands.github.io/posts/transformer/tokenizer/</link><pubDate>Mon, 26 Jan 2026 22:20:00 -0800</pubDate><guid>https://low-hands.github.io/posts/transformer/tokenizer/</guid><description>&lt;p&gt;sasa&lt;/p&gt;</description></item><item><title>Word Embedding</title><link>https://low-hands.github.io/posts/transformer/embedding/</link><pubDate>Mon, 26 Jan 2026 22:20:00 -0800</pubDate><guid>https://low-hands.github.io/posts/transformer/embedding/</guid><description>&lt;h1 id="one-hot"&gt;One-hot&lt;/h1&gt;
&lt;p&gt;每个token表示为一个长向量，每个向量的维度为词表的大小，向量中只有一个维度的值为1，一般为该词在词表中的索引&lt;/p&gt;
&lt;h2 id="举例"&gt;举例&lt;/h2&gt;
&lt;p&gt;假设用 one-hot对句子进行表示，对句子分词之后，我们可以得到[&amp;lsquo;我‘，’爱‘，’北京‘，’天安门‘]，可以用one hot（独热编码）对单词进行编码。具体为：&lt;/p&gt;
&lt;p&gt;“我”可以表示为[1,0,0,0]&lt;/p&gt;
&lt;p&gt;&amp;ldquo;爱&amp;quot;可以表示为[0,1,0,0]&lt;/p&gt;
&lt;p&gt;&amp;lsquo;北京&amp;rsquo;可以表示为[0,0,1,0]&lt;/p&gt;
&lt;p&gt;&amp;lsquo;天安门&amp;rsquo;可以表示为[0,0,0,1]&lt;/p&gt;
&lt;h2 id="问题"&gt;问题&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;one-hot向量之间彼此正交，无法识别每个词之间的关系（无法计算相似度，都为0）&lt;/li&gt;
&lt;li&gt;维度爆炸。维度和词表有关系，模型训练难度增大&lt;/li&gt;
&lt;li&gt;向量稀疏，难以捕捉语义关系，因为数据点分布系数，距离度量失效。而且稀疏矩阵存储效率低&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="词嵌入"&gt;词嵌入&lt;/h1&gt;
&lt;p&gt;词嵌入（Word Embedding）是将人类语言中离散、抽象的文本词汇，通过算法映射为计算机可理解的「连续、稠密的低维实数向量」 的文本表示技术&lt;/p&gt;
&lt;h1 id="分布式表示"&gt;分布式表示&lt;/h1&gt;
&lt;p&gt;词嵌入将词表示为一种分布式的形式。分布式表示是将词转化成一个定长、稠密并且存在语义关系的向量，即分布相似的词，是有相似的语义的&lt;/p&gt;
&lt;h2 id="word2vec"&gt;Word2Vec&lt;/h2&gt;
&lt;h3 id="cbow"&gt;CBOW&lt;/h3&gt;
&lt;h3 id="skip-gram"&gt;Skip-gram&lt;/h3&gt;</description></item></channel></rss>