發表文章

[ML] Federated Learning: Google 輸入法的應用

圖片
本文內容主要來自: Hard, Andrew, et al. "Federated learning for mobile keyboard prediction." arXiv preprint arXiv:1811.03604 (2018). 連結參考:  https://arxiv.org/abs/1811.03604 在舊有的 deep learning 架構中, 我們通常將大量資料收集到一個伺服器, 並學習網路之參數, 這樣架構的假設是: 這些資料包含了所有使用者的行為, 因此, 在給定一個好的網路架構的前提下, 我們便可藉由該網路的參數學習, 來表現所有資料的特徵. 然而, 這樣的假設, 面臨到行為的動態, 以及資料增長的問題. 舉例來說, 在此研究中的題目, 是根據現有輸入, 對下一個輸入詞彙的預測. 此問題會隨著地域與時間的變化, 而有不同結果. 因此, 如何透過使用者的回饋, 動態更新模型, 就是一個困難的問題. 因此, Federated Learning 被提出用一個簡單的方法來解決此問題, 其中的想法與資料交換大致如下圖所示: 在一開始, 每一個裝置會先下載一個共通的模型 (w_t), 在此應用中, 下一個字元的預測藉由 LSTM 網路進行, 因此, w_t 代表的是 LSTM 中的參數, 透過預先收集的大量資料學習出來, 接著, 根據每個裝置上收集的資料 (個數為n_k), 裝置自行學習並更新 LSTM 網路, 此參數值 (w^k_{t+1}) 也會回傳至中央伺服器, 執行 Federated Learning 更新, 中央伺服器收到每個裝置的更新參數後, 根據資料的大小賦與權重 (n_k/N),  並更新整體網路的共通模型 (w_{t+1}). 在 Federated Learning 的架構下, 不但能夠利用裝置有限的計算資源, 提供一個分散式的網路學習架構, 動態對應越來越大的資料叢集, 另一方面, 考慮到回傳的資料為 LSTM 網路的參數, 而非使用者行為, 此方法可以減少對使用者隱私的侵害, 並減少中間網路的資料傳輸.

LTE筆記: 5G 定位的應用與演進 ~3

圖片
本文主要搬移自:  https://www.ericsson.com/en/blog/2020/12/5g-positioning--what-you-need-to-know 在 上一篇文章 中, 我們大略介紹了在 5G NR 中的定位應用, 其對應的技術進程, 以及在 5G NR 下增進定位精確度的機會. 在這一篇文章中, 我們將繼續說明在 3GPP R16 下的定位架構. 在 5G NR 中, 定義一個新的單元: Location Management Function (LMF), 用以作為定位的核心,  LMF 透過 Access and Mobility management Function (AMF) 收取感測資訊, 並透過 NLs 介面, 回報定位的結果, 如下圖所示: 來自:  https://www.ericsson.com/en/blog/2020/12/5g-positioning--what-you-need-to-know 在 5G NR 中, AMF 負責管理裝置的移動性與註冊, 對應於 4G 中 Control Plane 的功能, 並可以透過 NG-C 介面, 直接和基地台溝通, 取得相關的通道量測資訊, 如果想要知道 5G NR 架構下的細節, 可以參考: https://note-on-clouds.blogspot.com/2020/08/5G-Core-Network-SBA-1.html https://note-on-clouds.blogspot.com/2020/09/5G-Core-Network-SBA-2.html 另一方面, 資料的回傳是以 LPP (LTE Positioning Protocol) 和 LPPa (LPP Annex) 的格式, 主要是透過量測傳送訊號中特殊的 Resource block 來取得訊號強度, 對於 Downlink 來說, UE 觀測基地台的 PRS (Positioning Reference Signal) 訊號, 對於 Uplink 來說, 則是基地台觀測 UE 的 SRS (Sounding Reference Signal) 訊號, 考慮到有小基地台密集佈建的情況, 相鄰的小基地台將使用不同的 PRS 排列, 同時, SRS 訊號也會...

LTE筆記: 5G 定位的應用與演進 ~2

圖片
本文主要搬移自:  https://www.ericsson.com/en/blog/2020/12/5g-positioning--what-you-need-to-know 在通訊的進展中, 定位技術的發展一直是重要, 但是進度緩慢的一塊, 在室外的環境中, 我們通常可以用 GPS 取得 5 公尺左右的誤差, 但在室內或是城市的環境中, 卻一直缺乏一種良好的方式進行定位. 在過去 4G 的時代中, 考慮大基地台的配置, 著重於(室外)訊號的覆蓋,  對於定位資訊的要求, 只有在跨基地台移動 (換手) 時出現, 因此, 只需要室外環境數公尺的定位需求就可以滿足, 但是在 5G 的架構下, 由於 (1) 小基地台的布建, 增加換手頻率, (2) mmWave (26 GHz) 通訊帶來的波束指向問題, 需要使用者的位置資訊, (3) V2X 車聯網通訊的低延遲需求, 也引入車間相互定位的需求, (4) 企業專網與工業 4.0 的 IoT 環境, 引入對"物"的精確定位需求, 以上 5G 的新興應用層面, 推動定位技術在 5G 中的重要性, 從過去的加分角色, 變成 5G 網路中必須的技術. 來自:  https://www.ericsson.com/en/blog/2020/12/5g-positioning--what-you-need-to-know 考慮到定位的不同應用需求以及其技術限制, 在 Ericsson 這篇文章中, 將應用場域按照定位需求, 分三個等級:  1-10 cm (cemtimeter), 10~100 cm (Decimeter), >100 cm (meter), 並對應於: 室內工業物聯網, V2X 車載網路, 以及行動通訊 (Mobile broadband, MBB), 其中, MBB 的應用與技術和 4G 類似, 使用 DL-TDoA 的技術與訊號強度 (RSRP) 為主, DL-TDoA 技術透過使用者 (UE) 回報量測值, 並以三角定位方式求得位置, fingerprinting 則是利用收集得訊號強度進行比對並定位, 進入 Decimeter 等級主要是引入 GPS 的相關技術 (GPS-RTK, AGPS),  並搭配車上的感測器, 以及路邊的裝置 (road-si...

LTE筆記: 5G 定位的應用與演進 ~1

圖片
本文主要搬移自:  https://blog.3g4g.co.uk/2020/10/positioning-techniques-for-5g-nr-in.html 針對 3GPP R16 對於定位的更新, Qualcomm 總結如下: Release 16 supports multi-/single-cell and device-based positioning, defining a new positioning reference signal (PRS) used by various 5G positioning techniques such as roundtrip time (RTT), angle of arrival/departure (AoA/AoD), and time difference of arrival (TDOA). Roundtrip time (RTT) based positioning removes the requirement of tight network timing synchronization across nodes (as needed in legacy techniques such as TDOA) and offers additional flexibility in network deployment and maintenance. These techniques are designed to meet initial 5G requirements of 3 and 10 meters for indoor and outdoor use cases, respectively. In Release 17, precise indoor positioning functionality will bring sub-meter accuracy for industrial IoT use cases. 簡單來說, R16 定義了一個新的參考訊號 (PRS), 用以支持定位技術: RTT, AoA/AoD, TDOA, 並放寬了同步的要求. 在 R16 中, 針對定位的目標為: (室內) 3 公尺, (室外) 10 公尺 的定位精確度. 針對精密室內定位的需...

[RESTful] Java Servlet API Server ~3 (JSON format 與 library)

圖片
在上一篇文章中, 我們介紹了 Servlet 架構下的編譯環境, 並以範例說明如何產生一個網頁回應. 然而, 對於 RESTful API 而言, 另一個主要的需求即是作為 API 介面, API 的全稱為: Application Programming Interface, 主要的用途就是提供一個介面, 讓不同應用程式透過網路溝通, 簡單來說, 像是一個服務的窗口, 並定義該窗口對應的功能與服務. 另一方面, JSON 則是一種資料封裝格式, 可以把資料以 key-value 的方式, 組成 JSON 物件, 進行傳送. 來自:  https://docs.aws.amazon.com/zh_tw/sdk-for-javascript/v2/developer-guide/working-with-json.html 為了利用 Servlet 提供 JSON 的解析與回應, 我們需要章中, 我們介紹了 Servlet 架構下的編譯環境, 並以範例說明如何產生一個網頁回應. 然而, 對於 RESTful API 而言, 另一個主要的需求即是作為 API 介面, API 的全稱為: Application Programming Interface, 主要的用途就是提供一個介面, 讓不同應用程式透過網路溝通, 簡單來說, 像是一個服務的窗口, 並定義該窗口對應的功能與服務. 另一方面, JSON 則是一種資料封裝格式, 可以把資料以 key-value 的方式, 組成 JSON 物件, 進行傳送. 為了利用 Servlet 提供 JSON 的解析與回應, 我們需要 import org.json.*; 做為參考的 library, 範例程式可以參考:  https://blog.csdn.net/CapMiachael/article/details/72930357 import java.io.BufferedReader;  import java.io.IOException;  import java.io.PrintWriter;  import javax.servlet.ServletException;  import javax.servlet.http.HttpS...

[RESTful] Java Servlet API Server ~2 (helloworld)

圖片
在 上一篇文章 中, 我們建立了 Servlet 的編譯環境, 接著, 我們就從最簡單的 helloworld 開始, 介紹如何撰寫第一支 Servlet 程式. 以下是編譯環境中的路徑: 網頁根目錄: /var/lib/tomcat8/webapps/ROOT/ tomcat8 library 目錄: /usr/share/tomcat8/lib/ tomcat8 log 目錄: /var/lib/tomcat8/logs/ 首先, 我們要先定義 Servlet API 的入口, 此文件位於: /var/lib/tomcat8/webapps/ROOT/WEB-INF/web.xml 我們將內容填入如下: <web-app> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> </web-app> 在文件中, 定義了 API 的路徑 ( servlet-mapping ) 以及對應的 Servlet 程式 ( servlet ), 透過這兩個設定, 我們就建立了 Servlet 與 API Server 之間的呼叫關係, 接著, 我們進行 helloworld 的 Servlet 程式撰寫, 以下為範例: import java.io.*;  import javax.servlet.ServletException;  import javax.servlet.http.*;  public class HelloWorld extends HttpServlet  {       static ...

[RESTful] Java Servlet API Server ~1 (Servlet 介紹與 tomcat8)

圖片
在 之前的文章 中, 介紹了如何用 node.js 快速建立 API Server,  然而, 由於效率問題, node.js 並不是一個穩定的架構用以作為 API Server, 同時, JSON Server 本身實作的架構, 依賴對檔案的讀寫, 對於大量存取的 API 實作來說, 容易造成 IO 的消耗, 考慮到上述因素, 我們便開始研究其他 API Server 的實作方式, 在本篇介紹中, 便以 Java Servlet + tomcat8 作為實作的平台. 關於 Java Servlet 是 Java 語言中的一種特殊類別, 用 Java 編寫的伺服器端程式, 可以透過與使用者的互動, 動態產生網頁, 對於 API Server 來說, 主要的功能則是繼承自: javax.servlet.http.HttpServlet 另一方面, tomcat 則是一開源的 HTTP 伺服器, 支援 Servlet 與 JSP, 在我們的實作中, 我們使用 ubuntu 16.04 作為基礎的作業系統, 並使用 tomcat8 作為網頁伺服器 (參考: 此文 ). 安裝 tomcat8 的開發環境: sudo apt-get install tomcat8 sudo apt-get install tomcat8-docs tomcat8-examples tomcat8-admin tomcat8 的開啟/關閉/重啟: systemctl start tomcat8 systemctl stop tomcat8 systemctl restart tomcat8 安裝好 tomcat8 之後, 會使用預設的服務埠 (8080), 連入: http://127.0.0.1:8080 之後, 我們可以看到下方頁面: 其中, 紅框處為網頁目錄的位置,  此目錄也是我們之後開發 Servlet 程式的相對根目錄, 藍框處標明了套件安裝的路徑, 其中, 這兩個路徑我們之後都還會用到, /usr/share/tomcat8/lib/ 有用以 compile 的 library, /var/lib/tomcat8/logs/ 則保存紀錄檔, tomcat8-examples 則提供一些 Servlet 的範例程式, 可以參考. 我們在此整理一下開發環境...