1. 程式人生 > >CTC學習筆記(二) 訓練和公式推導

CTC學習筆記(二) 訓練和公式推導

整體思路

訓練流程和傳統的神經網路類似,構建loss function,然後根據BP演算法進行訓練,不同之處在於傳統的神經網路的訓練準則是針對每幀資料,即每幀資料的訓練誤差最小,而CTC的訓練準則是基於序列(比如語音識別的一整句話)的,比如最大化p(z|x),序列化的概率求解比較複雜,因為一個輸出序列可以對應很多的路徑,所有引入前後向演算法來簡化計算。

前期準備

  1. 輸入
    x,長度為T
  2. 輸出集合
    A表示正常的輸出
    A=A{blank}表示輸出全集
    AT表示輸入x對應的輸出元素集合
  3. 輸出序列
    π表示輸出路徑
    l表示輸出label序列
    F表示路徑到label序列的對映關係
  4. 概率
    y
    tk
    表示時間t輸出k的概率
    p(π|x)=t=1Tytπt表示基於輸入x的輸出π路徑的概率
    p(l|x)=πF1(l)p(π|x)表示輸出label序列的概率是多條路徑的概率和。

前後向演算法

這裡寫圖片描述
考慮到計算p(l|x)需要計算很多條路徑的概率,隨著輸入長度呈指數化增加,可以引入類似於HMM的前後向演算法來計算該概率值。
為了引入blank節點,在label首尾以及中間插入blank節點,如果label序列原來的長度為U,那麼現在變為U’=2U+1。

前向

前向變數為α(t,u),表示t時刻在節點u的前向概率值,其中u[1,2U+1].
初始化值如下:

α(1
,1)=y1b

α(1,2)=y1l1
α(1,u)=0,u>2
遞推關係:
α(t,u)=ytlui=f(u)uα(t1,i)
其中
f(u)={u1u2if lu=blank or lu2=luotherwise
注:如果l表示{c,a,t},那麼l’表示為{b,c,b,a,b,t,b},所以原來在l中的下標u為2,在l’中的下標u變為4。
α(t,u)=0u<U2(Tt)1對應於上圖中的右上角部分,因為時間的限制,有些節點不可能到達最後的終止節點。
根據上圖,很容易理解前向的遞推關係。

後向

初始化值:

β(T,U)=1

β(T,U1)=1
β(T,u)=0,u<U2
α(1,u)=0,u>2
遞推關係:
β(t,u)=i=ug(u)β(t+1,i)yt+1li
其中
g(u)={u+1u+2if lu=blank or lu+2=luotherwise

取log

概率計算在log計算,避免underflow,其中log加可以通過以下形式轉化:

ln

相關推薦

CTC學習筆記 訓練公式推導

整體思路 訓練流程和傳統的神經網路類似,構建loss function,然後根據BP演算法進行訓練,不同之處在於傳統的神經網路的訓練準則是針對每幀資料,即每幀資料的訓練誤差最小,而CTC的訓練準則是基於序列(比如語音識別的一整句話)的,比如最大化p(z|x

java學習筆記parseIntvalueOf 以及字串+StringBuilder的區別

parseInt和valueOf 我們平時應該都用過或者見過parseInt和valueOf這兩個方法。一般我們是想把String型別的字元數字轉成int型別。從這個功能層面來說,這兩個方法都一樣,都可以勝任這個功能。 但是,我們進入原始碼,看下Integer類下這兩個方法 pars

Java NIO 學習筆記----聚集分散,通道到通道

目錄: Java NIO 學習筆記(一)----概述,Channel/Buffer Java NIO 學習筆記(二)----聚集和分散,通道到通道 Scatter / Gather 通道的聚集和分散操作 NIO 具有內建的 scatter/gather 支援,用於描述讀取和寫入通道的操作。 分散(

C# EMGU 3.4.1學習筆記XMLYAML檔案的寫入

以下是《OpenCV3程式設計入門》中5.6.3的示例程式的C# + EMGU 3.4.1版,和C++程式相比,有如下幾點不同: 1. 使用Matrix<>儲存多維陣列,多維陣列的各維需要使用{}擴起來,之間用逗號分隔; 2. C#中無法使用<<和

機器學習筆記矩陣線性代數 例:用Python實現SVD分解進行圖片壓縮

線性代數基本只要是理工科,都是必修的一門課。當時學習的時候總是有一個疑惑,這個東西到底是幹嘛用的?為什麼數學家發明出這麼一套方法呢,感覺除了解方程沒發現有什麼大用啊!但隨著學習的深入,慢慢發現矩陣的應

Spring-Cloud學習筆記RestTemplateFeign的使用方式以及部分註解的使用

通常,我們在搭建springcloud微服務架構時,會把我們的服務註冊到高可用eureka服務註冊發現中心上面,各個服務之間的通訊就是無可避免的,此時我們就需要用到RestTemplate 或者Feign去進行各個服務之間的通訊呼叫。                    

python學習筆記列表元組

序列是Python中最基本的資料結構。序列的索引從0開始。python中共有六種內建的序列,包括:列表,元組,字串,Unicode字串,buffer物件和xrange物件。 2.1 通用序列操作 python中的所有序列型別都可以進行某些特定的操作:索引indexing,

數據結構學習筆記 線性表的順序存儲鏈式存儲

出錯 初始化 node != test span 輸入 des val 線性表:由同類型數據元素構成有序序列的線性結構  --》表中元素的個數稱為線性表的長度  --》沒有元素時,成為空表  --》表起始位置稱表頭,表結束位置稱表尾 順序存儲:    1 package

javascript學習筆記:定義函數、調用函數、參數、返回值、局部全局變量

兩個 cnblogs bsp 結果 value ava ase com 調用 定義函數、調用函數、參數、返回值 關鍵字function定義函數,格式如下: function 函數名(){ 函數體 } 調用函數、參數、返回值的規則和c語言規則類似。 1 <!DOC

設計模式學習筆記--簡單工廠模式工廠模式

bsp bubuko rac oid nds gen body () pri 老生長談的兩個設計模式了,這裏把這兩個設計模式對比著來總結一下。 什麽是簡單工廠模式? 簡單工廠模式:根據傳入工廠類的參數動態決定要創建哪一個產品類的實例。 UML圖如下(以實現一個計算器為例):

JVM學習筆記--方法調用之靜態分配動態分配

extends AD 找到 n! sse 運行時 面試 static sys 本篇文章從JVM的角度來理解Java學習中經常提到的重載和重寫。 方法調用:方法調用不等同於方法執行,在Java虛擬機中,方法調用僅僅是為了確定調用哪個版本的方法。方法調用分為解析調用和分派。解析

SOC中的DFTBIST對比與比較-IC學習筆記

獨立 讀取 c學習 連接 特殊 客戶服務 bsp design 來源 ATE:ATE是Automatic Test Equipment的縮寫,根據客戶的測試要求、圖紙及參考方案,采用MCU、PLC、PC基於VB、VC開發平臺,利用TestStand&LabV

opencv 視覺項目學習筆記: 基於 svm knn 車牌識別

its ++ eas -a rect() repr poi obj std 車牌識別的屬於常見的 模式識別 ,其基本流程為下面三個步驟: 1) 分割: 檢測並檢測圖像中感興趣區域; 2)特征提取: 對字符圖像集中的每個部分進行提取; 3)分類: 判斷圖像快是不是車牌或者 每

Scala學習筆記:類物件

object object 是隻有一個例項的類。它的定義與Java中的class類似,如: // 單例物件 object AppEntry { def main(args: Array[String]): Unit = { print("Hello World!") } }

htmlcss學習筆記

1表格 1.1table tr td 1.2表格屬性 width border align="center" cellspacing 單元格邊框和單元格邊框之間的距離 cellpadding 單元格內容與單元格邊框之間的距離 *三參為0 border cellspaci

《資料結構與演算法 python語言描述》學習筆記————抽象資料型別Python類

第一部分:學習內容概要 抽象資料型別 Python的類 第二部分:學習筆記 抽象資料型別   1.抽象資料型別(Abstract Data Type,ADT),通過一套介面闡述說明這一程式部分的可用功能,但不不限制功能的實現方法。      2.抽象資料型

opencv 視覺專案學習筆記: 基於 svm knn 車牌識別

車牌識別的屬於常見的 模式識別 ,其基本流程為下面三個步驟: 1) 分割: 檢測並檢測影象中感興趣區域; 2)特徵提取: 對字元影象集中的每個部分進行提取; 3)分類: 判斷影象快是不是車牌或者 每個車牌字元的分類。 車牌識別分為兩個步驟, 車牌檢測, 車牌識別, 都屬於模式識別。 基本結構如下: 一、車牌

cs231n斯坦福基於卷積神經網路的CV學習筆記神經網路訓練細節

五,神經網路 注意點part1 例項:邏輯迴歸二層神經網路訓練函式 使用權重w和偏差值biase計算出第一個隱含層h,然後計算損失,評分,進行反向傳播回去 多種常用啟用函式(一般預設max(0,x)),如sigmoid函式具有飽和區梯度0,非零點中心,計算x複

ElasticSearch學習筆記IK分詞器拼音分詞器的安裝

ElasticSearch是自帶分詞器的,但是自帶的分詞器一般就只能對英文分詞,對英文的分詞只要識別空格就好了,還是很好做的(ES的這個分詞器和Lucene的分詞器很想,是不是直接使用Lucene的就不知道),自帶的分詞器對於中文就只能分成一個字一個字,這個顯然

Scala學習筆記:控制結構函式

2.1 條件表示式       2.1.1 Scala中if/else語法結構和java一樣,不同點在於此if表示式有值:           val s=if (x>0) 1 else -1        //s的值要麼是1,要麼是-1,取決於X的範圍