One-hot

维基百科,自由的百科全书
跳到导航 跳到搜索
二進制 格雷碼 One-hot
000 000 00000001
001 001 00000010
010 011 00000100
011 010 00001000
100 110 00010000
101 111 00100000
110 101 01000000
111 100 10000000

One-hot數位電路中被用來表示一種特殊的位元組合,該位元組裏,僅容許單一位元爲1,其他位元都必須爲0。之所以稱爲one-hot就是因爲只能有一個1(hot)。若情況相反,只有一個0,其餘爲1,則稱爲one-cold[1]。在機器學習裏,也有one-hot向量(英語:one-hot vector)的概念。在一任意維度的向量中,僅有一個維度的值是1,其餘爲0。譬如向量 ,即爲15維空間中的一組one-hot向量。將類別性資料轉換成one-hot向量的過程則稱one-hot編碼(英語:one-hot encoding[2]。在統計學中,虛擬變數英语Dummy variable (statistics)代表了類似的概念。

One-hot目前並無公認或被廣泛使用的中文譯名。目前可見的one-hot encoding譯名有獨熱編碼[3] 以及一位有效編碼[4]

應用[编辑]

自然語言處理[编辑]

自然語言處理中,若有個字典或字庫裏有個單字,則每個單字可以被一個維的one-hot向量代表。譬如若字庫裏僅有apple(蘋果),banana(香蕉),以及pineapple(鳳梨)這三個單字,則他們各自的one-hot向量可以爲:

由於電腦無法理解非數字類的數據,One-hot編碼可以將類別性數據轉換成統一的數字格式,方便機器學習的演算法進行處理及計算。而轉換成固定維度的向量則方便機器學習演算法進行線性代數上的計算。另外由於一個one-hot向量中,絕大部分的數字都是0,所以若使用稀疏矩陣的資料結構,則可以節省電腦記憶體的使用量。

有限狀態機[编辑]

One-hot編碼常常被用來表示一個有限狀態機狀態英语State (computer science)。如果使用二進制格雷碼來代表狀態,則需要用到解碼器才能得知該碼代表的狀態。使用one-hot來代表狀態的話,則不需要解碼器,因爲若第個位元爲1,就代表機器目前在第個狀態。

一個有限狀態機的例子是由15個狀態構成的環狀計數器英语Ring counter。使用one-hot編碼來實現此狀態機的話,可以將15個正反器串聯在一起,每個正反器的Q輸出接到下一個正反器的D輸入,而第一個正反器的D輸入則是接到第15個的Q輸出,形成一個環狀。第一個正反器代表機器的第一個狀態,第二個正反器代表第二個狀態,依此類推。當機器被歸零重設時,第一個正反器的值爲1,其餘爲0。當一個時脈邊緣抵達正反器時,會將1推進到下一個正反器。依照這種方式,1可一步步推進到第15個正反器,亦即第15個狀態,再之後則重新回到第一個狀態。

位址解碼器英语Address decoder可以將二進制或格雷碼轉換成one-shot表示形式。而優先編碼器則是作用相反。

與其他編碼的差異[编辑]

優點[编辑]

  • 決定狀態機目前狀態的時間成本低,因爲讀取一個正反器的時間成本固定。
  • 改變機器的狀態所需時間成本也是固定,因爲每次只需要改變兩個正反器的值。
  • 設計及設計變更容易。
  • 容易偵測出非法狀態。
  • 可以有效率地使用FPGA的大量正反器[5]

相較於其他編碼,使用one-hot來實現狀態機通常可以達到更高的時脈頻率[5][6]

缺點[编辑]

  • 比起其他編碼,需要更多的正反器,使得其在PAL裝置上不切實際。
  • 會有很多非法狀態存在[7]。這是由於個正反器構成的計數器總共有個狀態(每個正反器可以是0或1,所以總共種可能狀態),但是合法狀態卻只有個(即同一時間只允許一個正反器是1,其他必須爲0),所以總共會有個可能的非法狀態。

參見[编辑]

參考文獻[编辑]

  1. ^ Harris, David and Harris, Sarah. Digital design and computer architecture 2nd. San Francisco, Calif.: Morgan Kaufmann. : p.129. ISBN 978-0-12-394424-5. 
  2. ^ deeplizard. One-hot Encoding explained. YouTube. 2018-01-12 [2019-09-08]. (原始内容存档于2019-10-19) (英语). 
  3. ^ 柚子皮. 数据预处理:独热编码(One-Hot Encoding). 2017-03-10 [2019-09-08]. (原始内容存档于2018-03-18) (中文). 
  4. ^ zhiyong_will. 数据处理——One-Hot Encoding. 2015-03-03 [2019-09-08]. (原始内容存档于2019-01-30) (中文). 
  5. ^ 5.0 5.1 Xilinx Inc. Appendix A Accelerate FPGA Macros with One-Hot Approach. HDL Synthesis for FPGAs Design Guide (PDF). 1995 [2019-09-09]. (原始内容存档 (PDF)于2020-05-15) (英语). 
  6. ^ Xilinx Inc. Section 3-13. Encoding State Machines. HDL Synthesis for FPGAs Design Guide (PDF). 1995 [2019-09-09]. (原始内容存档 (PDF)于2020-05-15) (英语). 
  7. ^ Cohen, Ben. Real Chip Design and Verification Using Verilog and VHDL. Palos Verdes Peninsula, CA, US: VhdlCohen Publishing. 2002: p.48. ISBN 0-9705394-2-8.