1. 程式人生 > >改進的迭代尺度演算法(IIS)

改進的迭代尺度演算法(IIS)

改進的迭代尺度演算法(Improved Iterative Scaling ,IIS)

改進的迭代尺度演算法是一種最大熵模型學習的最優化方法,其核心思想是:假設最大熵模型當前的引數向量是 ww,希望找到一個新的引數向量 w+δw+\delta,使得當前模型的對數似然函式值 Ψ\Psi 增加。重複這一過程,直至找到對數似然函式的最大值。

已知最大熵模型為:
(1)Pw(yx)=1Zw(x)exp(i=1nwifi(x,y)) P_{w}(y|x)=\frac{1}{Z_{w}(x)}\exp\left (\sum_{i=1}^{n}w_{i}f_{i}(x,y)\right ) \tag{1}


其中(2)Zw(x)=yexp(i=1nwifi(x,y))Z_{w}(x)=\sum_{y}\exp\left (\sum_{i=1}^{n}w_{i}f_{i}(x,y)\right )(規範化因子)\tag{2}
f(x,y)={1x,y滿0 f(x,y)=\left\{\begin{matrix} 1,若 x,y 滿足某一事實\\ 0,否則\end{matrix}\right.
對數似然函式:
(3)Ψ(w)=x,yp~(x,y)i=1nwifi(x,y)xp~(x)logZw(x) \Psi(w) =\sum_{x,y}\tilde{p}(x,y)\sum_{i=1}^{n}w_{i}f_{i}(x,y)-\sum_{x}\tilde{p}(x)\log Z_{w}(x)\tag{3}
其中,x,yp~(x,y)=xp~(x)\sum_{x,y}\tilde{p}(x,y)=\sum_{x}\tilde{p}(x)

可以看到 Ψ0\Psi \leq 0,所以,Ψ(w)=0\Psi(w)=0 是最優的。

現在我們需要求的就是使 Ψ(w)\Psi(w) 值最大時所對應的引數 ww 的值。

給定特徵函式集 f1,f2,...,fn{f_{1},f_{2},...,f_{n}},最大熵模型(1)和經驗分佈 P~(x,y)\tilde{P}(x,y),下面求 WW^{*},使得 W=argmaxxLP~(w)W^{*}=\arg \max_{x}L_{\tilde{P}}(w)
由定義:(4)Ψ(w)=x,yp~(x,y)logpw(yx)\Psi(w)=\sum_{x,y}\tilde{p}(x,y)\log p_{w}(y|x)\tag{4}

IIS 的想法是:假設最大熵模型當前的引數向量是 w=(w1,w2,...,wn)Tw=(w_{1},w_{2},...,w_{n})^T,我們希望找到一個新的引數向量 w+δ=(w1+δ1,w2+δ2,,...,wn+δn)Tw+\delta=(w_{1}+\delta_{1},w_{2}+\delta_{2},,...,w_{n}+\delta_{n})^{T},使得模型的對數似然函式值增大。如果能有一種向量的更新方法:w:w+δw:w+\delta,那麼就可以重複使用這一方法直到找到對數似然函式得最大值。

第一步:

由(4)得,模型引數從 www+δw+\delta,對數似然函式得改變數為:
Ψ(w+δ)Ψ(w)=4x,yp~(x,y)logpw+δ(yx)x,yp~(x,y)logpw(yx)=3x,yp~(x,y)i=1n(wi+δi)fi(x,y)xp~(x)logZw+δ(x)(x,yp~(x,y)i=1nwifi(x,y)xp~(x)logZw(x))=x,yp~(x,y)i=1nδifi(x,y)xp~(x)logZw+δ(x)Zw(x)\Psi(w+\delta)-\Psi(w)\overset{由(4)式}{=}\sum_{x,y}\tilde{p}(x,y)\log p_{w+\delta}(y|x)-\sum_{x,y}\tilde{p}(x,y)\log p_{w}(y|x)\\ \overset{由(3)式}{=}\sum_{x,y}\tilde{p}(x,y)\sum_{i=1}^{n}(w_{i}+\delta_{i})f_{i}(x,y)-\sum_{x}\tilde{p}(x)\log Z_{w+\delta}(x)-\left (\sum_{x,y}\tilde{p}(x,y)\sum_{i=1}^{n}w_{i}f_{i}(x,y)-\sum_{x}\tilde{p}(x)\log Z_{w}(x)\right )\\ =\sum_{x,y}\tilde{p}(x,y)\sum_{i=1}^{n}\delta_{i}f_{i}(x,y)-\sum_{x}\tilde{p}(x)\log \frac{Z_{w+\delta}(x)}{Z_{w}(x)}

相關推薦

改進尺度演算法IIS

改進的迭代尺度演算法(Improved Iterative Scaling ,IIS) 改進的迭代尺度演算法是一種最大熵模型學習的最優化方法,其核心思想是:假設最大熵模型當前的引數向量是 www,希望找到一個新的引數向量 w+δw+\deltaw+δ,使得當前模

python 學習彙總25:器iter tcy

迭代器 2018/6/12  目錄: iter 1.iter 2.iter-型別判斷 3.iter-解包 itertools工具 1.itertools函式簡表 見本人相關博文 2.itertools函式詳細說明 見本人相關博文 3

設計模式之器模式Iterator

前言: 參考圖書:軟體設計模式與體系結構 參考部落格:https://www.cnblogs.com/wanson/articles/9277813.html   正題:         迭代器(iterator)有時又稱遊標

產品測試流程

小編現在主要是做OA系統的迭代測試,偏於業務邏輯的功能測試,今天在這裡簡單記錄一下可能會涉及到的測試流程知識點: 一、設計評審 按照測試流程,第一步就是參與涉及評審,一般設計評審會有三方角色參與,分別是:產品、開發、測試。產品經理會提前通知參加評審的時間和地點,以及提供srs涉及文件。常規設計評審都是

研磨設計模式 之 器模式Iterator1——跟著cc學設計系列

14.1  場景問題 14.1.1  工資表資料的整合        考慮這樣一個實際應用:整合工資表資料。        這個專案的背景是這樣的,專案的客戶方收購了一家小公司,這家小公司有自己的工資系統,現在需要整合到客戶方已有的工資系統上。        客戶方已有的工

C++關於器刪除erase插入insert失效問題

初學者的我在學習迭代器的時候(今天這裡主要說的是vector的迭代器)碰到了一些問題,糾結了好些時候,總算弄明白了一點。 迭代器會在刪除插入等操作後失效,即在其刪除插入位置後的迭代器會失效,那所謂的失效是什麼意思? 失效一般是指迭代器指向了和你預期不一樣的位置了,但這

研磨設計模式 之 器模式Iterator2——跟著cc學設計系列

14.2  解決方案 14.2.1  迭代器模式來解決 用來解決上述問題的一個合理的解決方案就是迭代器模式。那麼什麼是迭代器模式呢? (1)迭代器模式定義   所謂聚合是:指一組物件的組合結構,比如:Java中的集合、陣列等。 (2)應用迭代器模式來解決的思路      

如何開好回顧會議1目的、議程

迭代回顧會議目的     迭代回顧會議作為迭代化開發中的一個重要活動,為保證敏捷團隊的高績效運作發揮著著不可或缺的作用。要開好一個迭代回顧會議,不論是敏捷教練還是團隊成員,都要牢記迭代回顧會議的目的。   檢查並調整     迭代回顧可以讓團隊在緊張的迭代開發工作結束之後,

遍歷聚合物件中的元素——器模式

3 完整解決方案       為了簡化AbstractObjectList類的結構,並給不同的具體資料集合類提供不同的遍歷方式,Sunny軟體公司開發人員使用迭代器模式來重構AbstractObjectList類的設計,重構之後的銷售管理系統資料遍歷結構如圖4所示:圖4銷售管

遍歷聚合物件中的元素——器模式

6 迭代器模式總結 迭代器模式是一種使用頻率非常高的設計模式,通過引入迭代器可以將資料的遍歷功能從聚合物件中分離出來,聚合物件只負責儲存資料,而遍歷資料由迭代器來完成。由於很多程式語言的類庫都已經實現了

17、行為型-器模式Iterator

迭代器模式(Iterator Pattern):提供一種方法來訪問聚合物件,而不用暴露這個物件的內部表示,其別名為遊標(Curso

排序演算法歸併排序的理解與實現

基本概念 歸併排序大量引用了遞迴,儘管在程式碼上比較清晰,容易理解,但這會造成時間和空間上的效能損耗 排序追求的就是效率,可以講遞迴轉化成迭代,改動後效能上就得到了進一步的提高。非遞迴的迭代方法避免了遞迴時深度為log2(n)的棧空間,空間知識用到申請歸併臨時用到的TR陣

35. 排序演算法8:歸併排序的實現

1. 基本原理   在上篇文章中介紹了歸併排序的遞迴實現,雖然遞迴的實現方式很簡單,通過遞迴呼叫就可以實現,但是會佔用大量的時間和空間,使得演算法的效率下降;使用迭代的方式代替遞迴的方式雖然會使得程式碼的編寫變得困難,但是會增大效率。   遞迴的思想實際上是

演算法】二叉樹、N叉樹先序、中序、後序、BFS、DFS遍歷的遞迴和實現記錄Java版

        本文總結了刷LeetCode過程中,有關樹的遍歷的相關程式碼實現,包括了二叉樹、N叉樹先序、中序、後序、BFS、DFS遍歷的遞迴和迭代實現。這也是解決樹的遍歷問題的固定套路。 一、二叉樹的先序、中序、後序遍歷  1、遞迴模板  (1)

<C++學習十三>C++器介紹未完待續

摘要: 本篇部落格僅作為筆記,如有侵權,請聯絡,立即刪除(網上找部落格學習,然後手記筆記,因紙質筆記不便儲存,所以儲存到網路筆記)   迭代器簡介:   (1)迭代器類似於指標型別,它也提供了對物件的間接訪問。   (2)指標是C語言中就有的東西,迭代器是C++中才有的,指標用起來靈活高效,迭代器功能更

重走Java設計模式——器模式Iterator Pattern

迭代器模式 定義 提供一種方法順序訪問一個聚合物件中各個元素, 而又無須暴露該物件的內部表示。 模式結構 1.抽象容器:一般是一個介面,提供一個iterator()方法,例如java中的Collection介面,List介面,Set介面等。 2.具體

SGISTL原始碼閱讀六 器下traits程式設計技法

SGISTL原始碼閱讀六 迭代器下(traits程式設計技法) 前言 上一篇部落格我們瞭解了迭代器的相應型別,簡單的引數推導機制可以實現針對不同的型別進行不同的操作,但是這並不能解決所有的情況。本文章將要介紹_STL原始碼門鑰_——traits程式設計技法。 凡是原生指標,都沒有

SGISTL原始碼閱讀五 器上器的五種相應型別associated types

SGISTL原始碼閱讀五 迭代器上(迭代器的五種相應型別associated types) 前言 之前在對STL的簡介中說到過,迭代器的作用是將資料結構(容器)和演算法粘合在一起,我們可以將它理解成smart pointer,它是一種行為類似指標的物件。 什麼是相應型別? 最

python3:深刻理解__iter__和__next__ 器的原理用自定義器方法進行講解

1.iter 的用法 咱都知道, list ,tuple,dict 都是可迭代物件,如果想讓他們轉化成迭代器. 我們可以這麼做,呼叫 inter()方法,它會返回一個迭代器. 例如: from collections import Iterable,Iterator a=[1,

zoj-4005牛頓法|手動開根號

手動開根還沒學會。。。主要是程式碼太迷了得研究下 要學手動開根的話可以參考一下連結: https://www.cnblogs.com/KasenBob/p/10041399.html 我是用了牛頓迭代法,可以參考以下內容: http://www.matrix67.com/blog/archives/3