TwIST算法MALTLAB主程序詳解

TwIST算法MALTLAB主程序詳解

關于TwIST算法的具體原理可以參考:
鏈接: https://ieeexplore.ieee.org/abstract/document/4358846
鏈接: https://blog.csdn.net/jbb0523/article/details/52193209

該算法的MATLAB源代碼:
鏈接: http://www.lx.it.pt/~bioucas/TwIST/TwIST.htm

1. 函數定義與輸入輸出變量

主函數的定義如下所示,TwIST包含7個輸出變量和若干個輸入變量,其中包含3個必需輸入變量和若干個可選輸入變量(varargin)。具體每個變量的含義可以參考MATLAB TwIST.m文件中的解釋。下文僅對一些關鍵參數進行解釋。

function [x,x_debias,objective,times,debias_start,mses,max_svd] = ...TwIST(y,A,tau,varargin)

該算法主要解決如下正則化問題:

arg min_x = 0.5*|| y - A x ||_2^2 + tau phi( x )

也就是論文中式(1)所示,注意在MATLAB代碼中存在一些符號表示的改變。如K?A,λ?tau等。
在這里插入圖片描述

其具體的迭代公式如原論文中式(17)-(19)所示
在這里插入圖片描述
從式(17)-(19)中看,我們需要 x 0 , α , β , y , K , Ψ λ x_{0},\alpha,\beta,y,K,\Psi_{\lambda} x0?,α,β,y,K,Ψλ?等一系列參數,上述迭代公式方可正確運行。針對算法,輸出變量中x即為目標的估計值,x_debias為目標估計值的去偏結果,獲得這一結果往往需要在主循環迭代結束后,通過適當的去偏迭代,消除正則化器造成的一些偏差。

輸入變量含義
y測量結果,可以為1為向量或者二維數組
A對應原論文中的K
tau正則化參數,對應原論文中的λ
Psi去噪函數句柄,對應原論文中的去噪函數ψ
Phi正則化器的函數句柄,對應原論文中的Φ
lambdaTwIST算法的lam1參數,對應原論文中的 λ 1 \lambda_{1} λ1?參數,論文中的 λ N \lambda_{N} λN?在程序中被設置為常數1
alphaTwIST的alpha參數 (詳見論文式 (22))
betaTwIST的beta參數 (詳見論文式 (23))

2.算法主要步驟

TwIST.m的代碼很長,但主要包含的內容并不多。下文主要對在代碼中關鍵部分進行解釋。按照從前往后的順序,主要包含了以下幾個內容:

(1)變量注釋。

這一部分對函數的每一個變量都進行了注釋,包括必須變量和可選變量。建議按照以上迭代公式了解關鍵參數的含義。

(2)變量設定。

這一部分主要在變量注釋和初始化兩部分之間。
主要定義了

  • 各個變量的默認值。
  • 使用一個switch-case分支語句讀取varargin所代表的可選輸入參數,實現可選變量的自定義功能。
  • 對主要變量,如alpha和beta進行設定。對于這個部分,多說一點。如原論文中所示

在這里插入圖片描述
在這里插入圖片描述

實際上存在如下關系:

0 < ξ 1 ≤ λ 1 < λ N ≤ ξ m , ξ  ̄ m ≡ m a x ( 1 , ξ m ) 0< \xi_{1} ≤ \lambda_{1} < \lambda_{N} ≤ \xi_{m} , \overline{\xi}_{m}≡max(1,\xi_{m}) 0<ξ1?λ1?<λN?ξm?,ξ?m?max(1,ξm?)
而在程序中,作者直接用 λ 1 \lambda_{1} λ1?表示了 ξ 1 \xi_{1} ξ1?,同時設定 ξ m \xi_{m} ξm? λ N = 1 \lambda_{N}=1 λN?=1。雖然可能有點誤差,不過我覺得無可厚非。

關于函數句柄,需要注意的是x在這里并不是只迭代的解x,而是一個指代未知變量的參數,如下面的AT(y)中的y。

if ~isa(A, 'function_handle')AT = @(x) A'*x;A = @(x) A*x;
endAty = AT(y);

(3)初始化。

初始化主要實現了 x 0 x_{0} x0?的設置方法,驗證了phi(x)和psi(x)函數是否有效,以及其他一些變量的初始設置。

(4)TwIST主循環迭代。

這一部分是整個代碼中最主要的部分。

TwIST算法的迭代包含兩個主要部分:TwIST迭代和IST迭代。IST_iters和TwIST_iters的值用于確定當前應該執行哪一種迭代。根據條件判斷,當TwIST_iters達到特定閾值或滿足特定條件時,會切換到執行IST迭代,而不是繼續TwIST迭代;反之亦然。

這一部分主要包含2個while循環,兩個while循環會一直運行,直到滿足對應條件。

在第二個while循環中有一個 if-else結構,用于判斷進行何種操作。在TwIST循環中,IST_iters和TwIST_iters并不會一直增加,而只是一個判斷flag,結合對應的if else,完成判斷。迭代次數的增加實際上由iter控制。

建議在主循環設置斷點,并將IST_iters和TwIST_iters后邊的分號去掉,使用demo進行調試。觀察IST_iters和TwIST_iters的值變化。這樣,IST_iters和TwIST_iters取什么值執行什么語句就一清二楚了。

去噪函數的作用

此外,在主循環中,還有一行比較重要。它解決了這樣一個問題:原論文中的迭代公式中并沒有psi去噪函數這樣一個變量,那它在程序中到底起到了什么作用呢?

x = psi_function(xm1 + grad/max_svd,tau/max_svd);

代碼中其他位置的psi_function只是傳參或者驗證,而該位置的psi_function是起到了實質作用的。psi_function主要用于執行閾值或收縮操作,通常涉及對給定向量或信號進行閾值處理。它可能采用軟閾值(soft thresholding)或硬閾值(hard thresholding)等技術,用于將信號的幅度調整為零或接近零,從而產生更稀疏的表示。

稀疏性操作

            if sparsemask = (x ~= 0);xm1 = xm1.* mask;xm2 = xm2.* mask;end

以上代碼是處理稀疏性的操作。當 sparse 變量為真時(即 sparse 變量為非零值),代碼會執行以下操作:

  • 首先,創建一個邏輯掩碼 mask,該掩碼用于標識變量 x 中非零元素的位置。也就是說,mask 的元素為 1 表示對應 x 中的元素不為零,為 0 表示對應 x 中的元素為零。
  • 然后,通過將 xm1 和 xm2 分別與 mask 相乘,將 xm1 和 xm2 中對應于 x 中零元素位置的部分置為零。
  • 這樣可以確保在算法的迭代過程中,對 x 的更新僅在非零位置進行,以保持其稀疏性。

(5)去偏。

在主循環之后,還有一個去偏階段(debias phase)。這是一個可選操作,作者給出的解釋是 :

If the ‘Debias’ option is set to 1, we try to remove the bias from the l1 penalty, by applying CG to the least-squares problem obtained by omitting the l1 term and fixing the zero coefficients at zero.

可見,這一部分主要是為了消除l1懲罰的偏差。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536733.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536733.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536733.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

tcp和udp協議分別是什么意思有什么區別?

TCP&#xff08;傳輸控制協議&#xff09;和UDP&#xff08;用戶數據報協議&#xff09;是兩種網絡傳輸協議&#xff0c;它們在網絡通信中有一些關鍵的區別。 連接性&#xff1a; TCP&#xff1a; 提供面向連接的服務。在通信之前&#xff0c;需要建立連接&#xff0c;數據傳輸…

Node.js(二)-模塊化

1. 模塊化的基本概念 1.1 什么是模塊化 模塊化是指解決一個復雜問題時&#xff0c;自頂向下逐層將系統拆分成若干模塊的過程。對于整個系統來說&#xff0c;模塊是可組合、分解和更換的單元。 1.2 編程領域中的模塊化 編程領域中的模塊化&#xff0c;就是遵守固定的規則&…

48V轉12V 300mA降壓芯片,60V耐壓、0.6A穩壓芯片帶ECO模式-AH590L

AH590L是一種48V轉12V 300mA降壓芯片&#xff0c;具有60V耐壓、0.6A穩壓電流的特點&#xff0c;并且還帶有ECO模式&#xff0c;是一種理想的開關電源解決方案。 AH590L是PWM模式 DC/DC降壓轉換器。TEL&#xff1a;l86*4884*3702*寬輸入電壓范圍4至60V適用于工業領域的廣泛應用…

有意思、好用的免費API分享

Facebook Games Services - Facebook Games Services 為游戲開發者提供了各種服務, 包括(但不限于) 成就 API, 分數 API, 應用通知, 請求, 游戲養成和 Facebook SDK for Unity.Google Play Games Services - Google Developers Games 網站提供了各種 API, SDK 和服務, 包括(但不…

AI安全綜述

1、引言 AI安全這個話題&#xff0c;通常會引伸出來圖像識別領域的對抗樣本攻擊。下面這張把“熊貓”變“猴子”的攻擊樣例應該都不陌生&#xff0c;包括很多照片/視頻過人臉的演示也很多。 對抗樣本的研究領域已經具備了一定的成熟性&#xff0c;有一系列的理論來論述對抗樣本…

解決jquery-1.11.0.js安全漏洞

摘要&#xff1a;這個文件被掃出安全漏洞有XSS攻擊等 &#xff0c;其中一個比較著名的漏洞是在JQuery 1.6.2版本中發現的。該漏洞被稱為”attrFn"漏洞&#xff0c;它允許攻擊者通過特殊構造的代碼執行任意的JavaScript代碼。 一、統一解決方式&#xff1a; jQuery官網 官…

javafx實現復雜統計圖繪畫

JavaFX 是一個用于創建富互聯網應用程序 (Rich Internet Applications) 的軟件平臺,可以用于創建各種圖形和圖表。下面是一個示例代碼,演示如何使用 JavaFX 繪制復雜的統計圖。 import javafx.application.Application; import javafx.collections.FXCollections; import ja…

one wire(單總線)FPGA代碼篇

一.引言 單總線&#xff08;OneWire&#xff09;是一種串行通信協議&#xff0c;它允許多個設備通過一個單一的數據線進行通信。這個協議通常用于低速、短距離的數字通信&#xff0c;特別適用于嵌入式系統和傳感器網絡。 二.one wire通信優點缺點 優點&#xff1a; 單一數據線…

Unity程序向Web服務器發送數據

Unity程序向Web服務器發送數據 一、介紹二、HTTP協議三、新建Unity工程&#xff0c;創建腳本1.新建Unity工程&#xff0c;創建腳本WebManager.cs&#xff0c;將其指定給場景中的任意游戲體。2.在WebManager.cs中添加一個m_info屬性和OnGUI函數顯示UI&#xff1a; 四、GET請求在…

npm使用詳解(好吧好吧是粗解)

目錄 npm是什么&#xff1f; npm有什么用&#xff1f; npm安裝 在 Windows 上 在 macOS 上 在 Linux 上&#xff08;使用 apt 包管理器為例&#xff09; 驗證 npm 安裝成功&#xff1a; npm使用 1. 初始化項目&#xff1a; 2. 安裝和管理依賴&#xff1a; 3. 查看和…

【DataV】DataV組件庫——更新數據視圖不更新

參考文章&#xff1a;dataV組件庫——改變數據視圖不主動刷新 問題&#xff1a; 拿到后端數值就直接賦值了&#xff0c;但是視圖&#xff08;頁面&#xff09;沒有更新。 解決&#xff1a; 官方文檔介紹dataV里面的組件props均未設置deep監聽&#xff0c;刷新props時&#xf…

一個利用摸魚時間背單詞的軟件

大家好&#xff0c;我是 Java陳序員。 最近進入了考試季&#xff0c;各種考試&#xff0c;英語四六級、考研、期末考等。不知道大家的英語四六級成績怎么樣呢&#xff1f; 記得大學時&#xff0c;英語四級都是靠高中學習積累的老本才勉強過關。 而六級則是考了多次&#xff…

20231224解決outcommit_id.xml1 parser error Document is empty的問題

20231224解決outcommit_id.xml1 parser error Document is empty的問題 2023/12/24 18:13 在開發RK3399的Android10的時候&#xff0c;出現&#xff1a;rootrootrootroot-X99-Turbo:~/3TB/Rockchip_Android10.0_SDK_Release$ make installclean PLATFORM_VERSION_CODENAMEREL…

靜態HTTP的常見問題和解決方法

大家好&#xff0c;歡迎來到今天的“靜態HTTP大講堂”&#xff01;今天我們要聊聊靜態HTTP的常見問題和解決方法。別小看這些問題哦&#xff0c;它們就像是那些頑皮的小妖精&#xff0c;時不時地給你的網站搞點惡作劇。不過別擔心&#xff0c;有我在&#xff0c;這些小妖精都得…

推薦一款好用的免費圖片轉換工具bmp轉png工具bmp2png

推薦一款好用的免費圖片轉換工具bmp轉png工具bmp2png 寫這個工具是因為要使用傳奇的部分素材在COCOS2DX使用&#xff0c;但是COCOS2DX不支持BMP如果直接將BMP轉換到PNG的話&#xff0c;網上找到的工具都不支持透明色轉換。難道要用PS一個一個摳圖嗎&#xff1f;要累死所以寫了…

HBase 超大表遷移、備份、還原、同步演練手冊:全量快照 + 實時同步(Snapshot + Replication)不停機遷移方案

博主歷時三年精心創作的《大數據平臺架構與原型實現:數據中臺建設實戰》一書現已由知名IT圖書品牌電子工業出版社博文視點出版發行,點擊《重磅推薦:建大數據平臺太難了!給我發個工程原型吧!》了解圖書詳情,京東購書鏈接:https://item.jd.com/12677623.html,掃描左側二維…

如何選擇適合業務的負載均衡策略?

在分布式系統的高可用設計中&#xff0c;負載均衡非常關鍵&#xff0c;我們知道&#xff0c;分布式系統的特性之一就是支持快速擴展&#xff0c;那么集群擴展之后&#xff0c;服務請求如何從服務器列表中選擇合適的一臺呢&#xff1f;這就需要依賴負載均衡策略。 負載均衡在處…

免 費 搭 建 小程序商城,打造多商家入駐的b2b2c、o2o、直播帶貨商城

在數字化時代&#xff0c;電商行業正經歷著前所未有的變革。鴻鵠云商的saas云平臺以其獨特的架構和先進的理念&#xff0c;為電商行業帶來了全新的商業模式和營銷策略。該平臺涉及多個平臺端&#xff0c;包括平臺管理、商家端、買家平臺、微服務平臺等&#xff0c;涵蓋了pc端、…

項目執行常用的ChatGPT通用提示詞模板

項目啟動與準備&#xff1a;如何確保項目按計劃啟動&#xff0c;并為項目執行做好充分準備&#xff1f; 任務分配與執行&#xff1a;如何合理分配任務&#xff0c;確保項目團隊成員明確各自的責任和目標&#xff1f; 進度監控與調整&#xff1a;如何實時監控項目進度&#xf…

Python 數據分析 Matplotlib篇 plt.rcParams 字典(第5講)

Python 數據分析 Matplotlib篇 plt.rcParams字典(第5講) ??????? ??博主 侯小啾 感謝您的支持與信賴。?? ?????????????????????????????????????????????????????????????????????????…