20251009 筆記,內容可能有錯,請參考來源影片。 [李宏毅機器學習2021影片](https://www.youtube.com/playlist?list=PLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2J) 今天影片內容 [【機器學習2021】元學習 Meta Learning (一) - 元學習跟機器學習一樣也是三個步驟](https://youtu.be/xoastiYx9JU?si=VYyLYQ9XU-XrTIZN) [【機器學習2021】元學習 Meta Learning (二) - 萬物皆可 Meta](https://youtu.be/Q68Eh-wm1Ts?si=jz1iAv5hXmx2731y) [【機器學習2021】課程結語 - 最後的業配並改編《為學一首示子姪》作結](https://youtu.be/JXDjNh2qlfc?si=wcQyanJi4d4S5fpH) ### 【機器學習2021】元學習 Meta Learning (一) - 元學習跟機器學習一樣也是三個步驟 大綱 ### I. 介紹元學習 (Meta Learning) A. 定義:學習的學習 (Learn to Learn)。 B. 動機:自動決定機器學習中的超參數 (hyperparameter)。 ### II. 機器學習 (ML) 框架回顧 A. ML 的三步驟:定義 Function、定義 Loss、執行 Optimization。 ### III. Meta Learning 的框架與定義 A. Learning Algorithm 本身被視為一個 Function $F$。 B. 目標:學習出一個優化的 Learning Algorithm $F$。 ### IV. Meta Learning 的三步驟解析 A. 步驟一:定義可學習參數 $\phi$ (Function) 1. $\phi$ 代表 Learning Algorithm 中想被學出的部分(例如初始化參數、網路架構、學習率)。 B. 步驟二:定義 Loss Function $L(\phi)$ 1. 訓練單元是**任務 (Task)**,每個任務包含訓練資料 (Support Set) 和測試資料 (Query Set)。 2. Loss 是將訓練好的分類器 $f_{\theta^*}$ 用於任務的**測試資料** (Query Set) 上計算而得。 3. 總 Loss $L(\phi)$ 是所有訓練任務 Loss 的平均值。 C. 步驟三:優化找尋 $\phi^*$ 1. 透過最小化 $L(\phi)$ 來找到 $\phi^*$ (Learning Algorithm)。 ### V. Meta Learning 的術語與挑戰 A. Few-shot Learning (小樣本學習) 是一種 Meta Learning 期望達成的**目標**。 B. 訓練與測試的差異:Across-task 與 Within-task。 C. 挑戰:Overfitting 和 Hyperparameter Tuning (需要 Development Task)。 --- ### I. 介紹元學習 (Meta Learning) * **Meta 的含義**:Meta 這個詞彙通常翻譯成「元」(例如一元復始的元)。 * **定義**:元學習(Meta Learning)的字面意思就是「學習的學習」(**Learn to Learn**)。這是一個比傳統機器學習更高層次的領域。 * **動機**: * 在傳統機器學習中,我們通常只能憑藉經驗和直覺來設定超參數 (hyperparameter)。 * Meta Learning 的目標是讓機器可以根據數據自動地學習出這些超參數。這些可學的項目可能包括學習率 (learning rate)、類神經網路架構、或初始化參數。 ### II. 機器學習 (ML) 框架回顧 傳統機器學習(Machine Learning)被拆解為三個核心步驟: 1. **定義 Function**:定義一個帶有未知參數 $\theta$ 的函數 $f$(在深度學習中即為神經網路的權重與偏差)。我們通常用 $f_{\theta}$ 來表示。 2. **定義 Loss**:定義 Loss Function $L(\theta)$,用於評估一組 $\theta$ 參數的好壞。通常是將訓練資料丟入 $f_{\theta}$ 後,計算其輸出與正確答案之間的距離(如 Cross Entropy)。 3. **優化 (Optimization)**:找到一組 $\theta^*$ 參數,使 Loss $L(\theta)$ 最小化。 ### III. Meta Learning 的框架與定義 * **Learning Algorithm 即 Function**:一個機器學習的演算法(Learning Algorithm,例如梯度下降)本身可以被視為一個**函數 $F$**。 * 這個函數 $F$ 的輸入是**一個資料集 (Dataset)**,輸出是**訓練好的結果**(例如一個分類器 $f$)。 * **學習目標**:傳統 ML 中的 Learning Algorithm ($F$) 是**人為設計 (handcrafted)** 的。Meta Learning 則是要用機器學習的概念來**學習出**一個 Learning Algorithm。 ### IV. Meta Learning 的三步驟解析 Meta Learning 旨在應用傳統 ML 的三步驟來尋找一個 Learning Algorithm ($F$)。 #### A. 步驟一:定義可學習參數 $\phi$ (Function) * **$\phi$ 的作用**:$\phi$ 是用來代表 Learning Algorithm $F$ 中那些想被學出的、未知的參數。 * **可學的組件**:$\phi$ 可以是網路的架構、初始化參數、或學習率等,這些在傳統 ML 中是人為設定的超參數。 * **表示**:Meta Learning Algorithm 可以寫成 $F_{\phi}$。 #### B. 步驟二:定義 Loss Function $L(\phi)$ * **訓練單元**:在 Meta Learning 中,訓練的單位是**任務 (Task)**,而非單一的數據點。我們需要準備一系列的**訓練任務**。 * **任務結構**:每一個任務都包含一組**訓練資料**(通常稱為 **Support Set**)和一組**測試資料**(通常稱為 **Query Set**)。 * **計算 Loss $L_n$**: 1. 將任務 $n$ 的**訓練資料**丟給 $F_{\phi}$ 進行學習,得到訓練好的分類器 $f_{\theta_n^*}$。 2. 將這個分類器 $f_{\theta_n^*}$ 應用於任務 $n$ 的**測試資料**(Query Set)上,計算其 Loss $L_n$。 3. Meta Learning 的 Loss ($L_n$) 是根據任務的**測試資料**計算的,Loss 越小,代表 $F_{\phi}$ 這個 Learning Algorithm 越好。 * **總 Loss**:總 Loss $L(\phi)$ 是所有訓練任務 $L_n$ 的平均值或總和。 #### C. 步驟三:優化找尋 $\phi^*$ * **目標**:找到 $\phi^*$ 使總 Loss $L(\phi)$ 最小化。 * **優化方法**:如果 $L(\phi)$ 對 $\phi$ 可微分,則可以直接使用 **Gradient Descent**。如果 $F$ 是複雜的離散結構(例如類神經網路架構),難以微分,則可以使用 **Reinforcement Learning (RL)** 或 **Evolutionary Algorithms** 等方法。 ### V. Meta Learning 的術語與挑戰 * **Few-shot Learning (小樣本學習)**: * Meta Learning 是**手段**(學習如何學習),Few-shot Learning 是**目標**(希望機器只看少量範例就能學會分類)。 * 因為 Few-shot Learning 的演算法通常需要透過 Meta Learning 才能學得,所以兩者常被混淆。 * **術語區分**: * **Support Set/Query Set**:為避免將任務內的訓練資料和測試資料與 Meta Learning 的訓練任務和測試任務混淆,文獻上常稱任務內的資料為 Support Set(訓練)和 Query Set(測試)。 * **Across-task training (跨任務訓練)**:根據多個任務的 Loss $L(\phi)$ 來優化 $F_{\phi}$ 參數 $\phi$ 的過程。 * **Within-task training (任務內訓練)**:在 Meta Learning Algorithm ($F_{\phi}$) 決定後,用單一任務的訓練資料學出分類器 $f_{\theta^*}$ 的過程。 * **優化複雜度**:計算一個 $L_n$ 需要完成一次完整的 Within-task training 和一次 Within-task testing。 * **Episode**:一次 Within-task training 加上一次 Within-task testing 的流程,通常合稱為一個 **Episode**。 * **Outer Loop / Inner Loop**:在某些 Meta Learning 方法(如 MAML 系列)中,Across-task training 稱為 **Outer Loop**,Within-task training 稱為 **Inner Loop**。 * **Meta Overfitting 與調參**: * Meta Learning 也存在 **Overfitting** 問題,即 Learning Algorithm $F_{\phi}$ 只在訓練任務上做得好,但在新的測試任務上表現差。 * 為了選擇 $F_{\phi}$ 的超參數(例如 $\phi$ 的學習率),Meta Learning 應該設置一個 **Development Task**(類似傳統 ML 的開發集),但許多文獻並未這樣做。 ### 【機器學習2021】元學習 Meta Learning (二) - 萬物皆可 Meta 大綱 ### I. 元學習 (Meta Learning) 可學的組件 A. 傳統學習演算法:梯度下降 (Gradient Descent)。 B. 可學習的組件:初始化參數、優化器、類神經網路架構等。 ### II. 技術一:學習初始化參數 (Learning to Initialize) A. 核心方法:MAML (Model Agnostic Meta Learning)。 B. 目標:學習一組對新任務訓練最有幫助的初始參數 $\theta^0$。 C. 相關方法:Reptile。 D. 訓練挑戰:需要調校超參數,存在訓練不穩定的問題 (e.g., "How to train your MAML")。 E. MAML 的成功關鍵:研究顯示,其有效性可能來自**特徵重用 (Feature Reuse)**,而非快速學習 (Rapid Learning)。 F. 變形:ANIL (Almost No Inner Loop) 和 First-order MAML。 ### III. 技術二:學習優化器 (Learning the Optimizer) A. 目標:學習梯度下降中的超參數 (如 Learning Rate, Momentum)。 B. 案例:Learning to learn by gradient descent by gradient descent (NIPS 2016)。 C. 實作:優化器可由 LSTM 等網路實現。 D. 限制: learned optimizer 在測試任務的網路架構或激活函數改變時可能失效。 ### IV. 技術三:網路架構搜索 (Network Architecture Search, NAS) A. 概念:將網路架構當作 Learning Algorithm 的參數 $\phi$ 進行學習。 B. 優化挑戰:網路架構是**離散的**,難以微分 (Differentiable)。 C. 解決方案: 1. 使用**強化學習 (Reinforcement Learning, RL)**:訓練一個 Agent 輸出架構相關參數,並最大化 Loss 的負值。 2. 使用**可微分架構搜索 (DARTS)**:將問題轉化為可微分的形式。 ### V. 技術四:學習資料相關組件與進階框架 A. 學習資料處理: 1. 學習 **Data Augmentation** 策略 (Task Augmentation)。 2. 學習 **Sample Weighting** 策略:根據資料難度或噪聲程度自動分配權重。 B. 拋棄梯度下降: 1. **學習比較 (Learning to Compare)**:屬於 Metric-based 方法,直接將 Support Set(訓練資料)和 Query Set(測試資料)輸入一個網路,在一個 Episode 中完成訓練和測試,不再有明確的訓練與測試階段區分。 ### VI. 應用:小樣本學習 (Few-shot Learning) A. Meta Learning 是**手段**,Few-shot Learning 是**目標**。 B. Few-shot Learning 類型:**N-way K-shot** (N 類別,每類 K 個範例)。 C. 基準任務:**Omniglot** 資料集 (1623 個字符,每個 20 個範例)。 D. 應用領域:Few-shot Learning 應用已擴展至語音、自然語言處理 (NLP)、機器翻譯等複雜任務。 --- ### I. 元學習 (Meta Learning) 可學的組件 * Meta Learning 透過學習演算法(Learning Algorithm),來決定傳統機器學習中通常由人為設定的組件。 * 最常用的 Learning Algorithm 其實是**梯度下降(Gradient Descent)**。 * 在梯度下降的訓練過程中,所有可以被學習的組件(或稱為 $\phi$ 參數)都可能成為 Meta Learning 的目標。 ### II. 技術一:學習初始化參數 (Learning to Initialize) * **目標**:Meta Learning 可以學習出對訓練特別有幫助的**初始化參數 $\theta^0$**,因為 $\theta^0$ 往往對最終結果有影響。 * **MAML (Model Agnostic Meta Learning)**:是最具代表性的學習初始化參數的方法之一。 * MAML 旨在找到一組通用的初始化參數,這組參數只需經過少量步驟的訓練,就能在新的任務上表現良好。 * **相似概念:自我監督學習 (Self-Supervised Learning)**: * Self-Supervised Learning 通過對大量未標記資料進行預訓練(Pre-training),獲得的預訓練結果也被視為一種**好的初始化**。 * **區別**:MAML 在訓練任務(Training Tasks)中使用了標註資料,而 Self-Supervised Learning 則主要利用未標記資料進行預訓練。 * **MAML 優勢**:MAML 效果好似乎是「理所當然」的,因為它是在多個訓練任務的監督下找到好的初始化,而 Self-Supervised Learning 則是在 Pre-training 任務(如 BERT 的填空題)上找到初始化。 * **MAML 的挑戰與爭議**: * MAML 的實作需要調整超參數(Hyperparameter),例如學習率,並且其性能會受到隨機種子(random seed)的影響,訓練結果有時不穩定。 * 有研究質疑 MAML 的成功是來自於 **Rapid Learning**(快速學習)還是 **Feature Reuse**(特徵重用)。有論文指出,MAML 有效的關鍵在於 **Feature Reuse**。 * **變形**:**Reptile** 是 MAML 的另一個變形方法。**ANIL (Almost No Inner Loop)** 則是一種大幅簡化運算的 MAML 變形。 ### III. 技術二:學習優化器 (Learning the Optimizer) * **目標**:優化器(Optimizer)本身的超參數,如 Learning Rate 或 Momentum,可以透過 Meta Learning 的方式被學習出來。 * **歷史**:早在 NIPS 2016 年就有論文提出 **"Learning to learn by gradient descent by gradient descent"** 的概念。 * 該方法將優化器視為一個可以被訓練的網路(例如 LSTM),並根據訓練任務來學習其參數。 * **限制**:當測試任務的網路架構或激活函數(Activation Function)發生變化時,學習到的優化器可能會失效。例如,在單層網路訓練的優化器,若在測試時遇到兩層網路或激活函數從 Sigmoid 換成 ReLU,效果就可能變差。 ### IV. 技術三:網路架構搜索 (Network Architecture Search) * **概念**:當我們在 Meta Learning 框架中學習網路的架構(Network Architecture)時,這就是 **Network Architecture Search**。 * 在這個情境中,網路架構就是 Learning Algorithm 的參數 $\phi$。 * **優化挑戰**:由於網路架構(例如層數 $1, 2, 3$ 層)是**離散的(Discrete)**,無法直接進行微分(Differentiation)和梯度下降。 * **解決方案**: 1. **使用強化學習 (RL)**:將網路架構的選擇視為 RL Agent 的輸出(Action)。Agent 的目標是**最大化** Reward(通常是 Loss 的負值),從而找到最佳架構。 * Agent(例如 Recurrent Network)會依序輸出與網路架構相關的超參數,如濾波器(Filter)的高、寬、Stride 等。 2. **可微分架構搜尋 (DARTS)**:DARTS (Differentiable Architecture Search) 是另一種經典做法,它想辦法讓 Network Architecture Search 問題變得**可微分**,從而可以直接使用梯度下降優化。 * **Network Architecture Search 與 Meta Learning 關係**:Network Architecture Search 可以被視為 Meta Learning 的其中一項技術,只是學習的目標集中在網路架構上。 ### V. 技術四:學習資料相關組件與進階框架 * **學習 Data Augmentation 策略**: * Meta Learning 可以學習如何自動找到最佳的資料擴增(Data Augmentation)方法,也被稱為 **Task Augmentation**。 * **學習 Sample Weighting 策略**: * 可以透過 Meta Learning 學習**如何給予不同的訓練樣本不同的權重**(Weight)。 * 例如,給予難度較高的樣本較大的權重,讓網路更專注於學習這些困難的案例。 * **拋棄梯度下降 (Learning to Compare)**: * 某些 Meta Learning 方法(例如 **Metric-based Approach**,或稱 **Learning to Compare**)在拋棄 Gradient Descent 這種迭代式的學習過程。 * 在這類方法中,網路直接將訓練資料(Support Set)和測試資料(Query Set)作為輸入,一次性輸出測試資料的答案,將訓練和測試過程(即一個 Episode)封裝在一個網路中。 ### VI. 應用:小樣本學習 (Few-shot Learning) * **關係**:Meta Learning 是**學習如何學習**的**手段**,而 **Few-shot Learning (Few-shot Learning)** 則是 Meta Learning 期望達成的**目標**。 * **Few-shot Learning 類型**:常見的 Few-shot Learning 任務是 **N-way K-shot Classification**,即任務中有 **N** 個類別,但每個類別只提供 **K** 個訓練範例(Support Set)。 * **基準任務**: * **Omniglot** 是 Few-shot Learning 研究中最常使用的基準資料集。 * Omniglot 包含 1623 個不同的手寫字符,每個字符有 20 個範例。 * 研究者從中隨機選取 $N$ 個字符作為類別,每個類別只取 $K$ 個範例,來構造 N-way K-shot 的訓練和測試任務。 * **複雜應用**:Meta Learning 的應用已經推廣到更複雜的領域,包括語音事件偵測、機器翻譯、語音識別和自然語言處理等。 ### 【機器學習2021】課程結語 - 最後的業配並改編《為學一首示子姪》作結 大綱 ### I. 課程內容回顧與總結 A. 前半學期核心技術:深度學習基礎、CNN、序列模型(Self-Attention, Transformer)。 B. 後半學期進階主題:生成模型(GAN)、無標註學習(BERT)、領域適應、RL、可解釋AI、網路壓縮、終身學習、Meta Learning。 ### II. 機器學習的應用與潛力 A. 課程中涵蓋的領域:圖片、自然語言處理、語音、強化學習。 B. 應用實例:圖像生成、翻譯、問答、語音辨識、COVID-19 趨勢預測等。 ### III. 課程目的與教學理念 A. 課程目標:提供深度學習關鍵技術的介紹 B. 期望學生:不只是走馬看花,未來能持續努力跨入技術的門檻。 C. 核心理念:對深度學習有**真實、完整而全面**的認識。 ### IV. 針對學生常見挑戰的回應(深度學習的本質問題) A. 運算資源與時長:訓練時間長、缺乏 GPU 是深度學習**本質上的問題**。 B. Colab 的作用:雖不完美,但實現了超大型班級的開課。 C. 參數調整的通靈:訓練結果難以預測、調校超參數困難,這也是**本質上的問題**。 D. 警惕:課程不隱藏困難,避免學生對深度學習產生「簡單」的**錯誤認識**。 E. 疫苗比喻:課程中的不適如同注射疫苗,雖然有副作用,但能幫助學生未來面對挑戰。 ### V. 課程結語與未來展望 A. 學習建議:鼓勵學生找應用解決問題、閱讀頂尖國際會議論文。 B. 寓言勉勵:改編《為學》的故事,勉勵即使缺乏資源的學生,仍能透過努力達成目標。 --- ### I. 課程內容回顧與總結 * **課程主線**:課程從尋找一個 Function 的概念開始。 * **前半學期內容**:涵蓋了線性模型不足、**深度學習(Deep Learning)**、卷積神經網路(CNN )以處理矩陣輸入、處理序列輸入的 **Self-Attention** 概念,以及 **Transformer** 模型(輸入與輸出長度可不一致)。 * **後半學期進階主題**: * **創造性**:生成模型(Generative Model) 和 **GAN**。 * **無標註資料**:自監督學習(Self-Supervised Learning)和 **BERT**。 * **不匹配資料**:**領域適應(Domain Adaptation)**。 * **決策與行動**:**強化學習(Reinforcement Learning, RL)**。 * **安全性與解釋性**:模型攻擊與防禦,以及 **可解釋機器學習(Explainable Machine Learning)**。 * **部署優化**:**網路壓縮(Network Compression)**。 * **長期學習**:邁向天網的 **終身學習(Lifelong Learning)**。 * **超越學習**:**元學習(Meta Learning)**(學習如何學習)。 ### II. 機器學習的應用與潛力 * **跨領域應用**:課程中展示了機器學習在 COVID-19 趨勢預測上的應用。 * **影像應用**:除了分類,還包括影像系統的攻防、調試、**壓縮**、解釋,甚至**影像的異常檢測**。 * **生成式 AI**:帶領學生做了讓機器畫圖、**生成二次元人物頭像**。 * **自然語言處理(NLP)**:翻譯(將一種語言自動翻譯成另一種) 和問答(QA)。 * **語音處理**:將聲音訊號辨識成文字(簡化版語音辨識、**音素辨識**),以及**語者辨識**。 * **強化學習**:讓機器玩小遊戲。 ### III. 課程目的與教學理念 * **課程定位**:這門課的目的**不是**帶學生深入研究某一個機器學習問題,而是告知學生在深度學習領域中存在哪些**關鍵技術**。 * **「一日遊」比喻**:課程就像是深度學習的**一日遊**,只是讓學生走馬看花地看到各種技術的存在。老師只是把門打開,告訴學生門裡可能有些什麼,但要真的跨入則需要學生自己未來的努力。 * **教學目的**:期許學生在修完課程後,能將助教的範例程式**改一改**,應用到自己想解的問題上。 * **避免誤解**:不將課程設計成只有選擇題,也不打算隱藏困難。目的是希望學生對深度學習有**真實、完整而全面**的認識,避免產生「深度學習很簡單」的**錯誤認識**。 ### IV. 針對學生常見挑戰的回應(深度學習的本質問題) * **運算資源和時長**:模型訓練時間長、缺乏好的 GPU、Colab 不夠用是課程中最常聽到的抱怨,但這是深度學習**本質上的問題**。 * **訓練時長變化**:過去訓練作業的基準線可能需要兩天才能完成,現在只需要數個小時,說明運算資源的汰換速度非常快。今日的痛苦是比較出來的。 * **「通靈」與調參**:訓練結果往往**無法預測**。如果有人說他訓練模型不用「通靈」,能知道所有超參數的設定,那反而應該懷疑他是否有實際訓練模型的經驗。 * **測試集和隱私**:Private/Public Leaderboard 設置限制、以及限制每天提交次數等,都是 Kaggle 競賽的標準配置,並非刻意刁難。 * **「疫苗」比喻**:課程中讓學生感到的不適,就像是**注射疫苗**。雖然可能有些許副作用(例如成績不佳),但這能幫助學生在未來面對更大的、沒有提示的挑戰時,具備真實的經驗。 ### V. 課程結語與未來展望 * **未來學習路徑**:鼓勵學生嘗試**找一個應用**來自己解決。若想更進一步,現在應當有能力閱讀機器學習**頂尖國際會議的論文**。 * **改編寓言**:改編了《為學》的故事來勉勵學生。故事中「貧者」與「富者」對比了兩種對待學習的態度: * **富者**(有資源者):數年來買 **V100** 但還沒修完 。 * **貧者**(缺乏資源者):完成十個作業,以告富者,富者有慚色。 * 這鼓勵那些缺乏運算資源的學生,即使資源匱乏,只要堅持修完這門課,便已是成功。 * **最終期望**:希望這門課能對學生的**人生有所影響**,並期許學生未來能用深度學習做出**今日無法想像的成就**。 --- 課程連結 [【機器學習2021】01~02 機器學習和深度學習基本概念簡介](https://hackmd.io/@JuitingChen/SyoNXkdslx) [【機器學習2021】03~08 機器學習任務攻略和最佳化技巧](https://hackmd.io/@JuitingChen/BJ6mXy_slg) [【機器學習2021】09~11 CNN 和 Self attention](https://hackmd.io/@JuitingChen/r1ahLgUngl) [【機器學習2021】12~13 Transformer](https://hackmd.io/@JuitingChen/H1tfXy_ige) [【機器學習2021】14~17 GAN](https://hackmd.io/@JuitingChen/S1adiwvhxg) [【機器學習2021】18~21 自監督式學習](https://hackmd.io/@JuitingChen/ryQG7J_sgl) [【機器學習2021】22~23 Auto-encoder](https://hackmd.io/@JuitingChen/r1sLPr92ge) [【機器學習2021】24~25 Adversarial Attack ](https://hackmd.io/@JuitingChen/HJ6jJIq3ge) [【機器學習2021】26~28 Explainable ML 和 Domain Adaptation](https://hackmd.io/@JuitingChen/SJZzQkdslg) [【機器學習2021】29-30 強化學習-1](https://hackmd.io/@JuitingChen/HJYziZR3gx) [【機器學習2021】31~33 強化學習-2](https://hackmd.io/@JuitingChen/Sy5DoWA3xl) [【機器學習2021】34~35 機器終身學習](https://hackmd.io/@JuitingChen/BytWmyuilg) [【機器學習2021】36~37 神經網路壓縮 ](https://hackmd.io/@JuitingChen/Bk7-m1_jlx) [【機器學習2021】37~40 Meta Learning](https://hackmd.io/@JuitingChen/SkkC6rT2gl)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.