<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>ML on ⛰️</title>
    <link>https://ymgmr.pages.dev/categories/ml/</link>
    <description>Recent content in ML on ⛰️</description>
    <image>
      <title>⛰️</title>
      <url>https://ymgmr.pages.dev/images/papermod-cover.png</url>
      <link>https://ymgmr.pages.dev/images/papermod-cover.png</link>
    </image>
    <generator>Hugo -- 0.147.7</generator>
    <language>en</language>
    <copyright>ymgmr</copyright>
    <lastBuildDate>Thu, 14 May 2026 08:34:21 +0900</lastBuildDate>
    <atom:link href="https://ymgmr.pages.dev/categories/ml/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ガウス過程事後分布の更新についてのメモ</title>
      <link>https://ymgmr.pages.dev/posts/gp-posterior-update/</link>
      <pubDate>Thu, 14 May 2026 08:34:21 +0900</pubDate>
      <guid>https://ymgmr.pages.dev/posts/gp-posterior-update/</guid>
      <description>&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;$f\sim\mathcal{GP}(0,k)$ から得られる観測を1点ずつ加えて事後分布を $n$ 回逐次更新した結果と、$n$ 点のデータ集合 $\mathcal{D}_n$ をまとめて条件付けて一度に計算した事後分布が同一であることを示します。&lt;/p&gt;
&lt;h3 id=&#34;設定&#34;&gt;設定&lt;/h3&gt;
&lt;p&gt;次の設定を仮定します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$f \sim \mathcal{GP}(0, k)$: 目的関数 $f$ は平均 $0$、カーネル関数 $k(x, x&#39;)$ のガウス過程に従う&lt;/li&gt;
&lt;li&gt;$\mathcal{X}$: 有限集合である入力空間&lt;/li&gt;
&lt;li&gt;$x_t$: 入力空間 $\mathcal{X}$ の中で獲得関数を最大化する点 ($t &gt; 1$)&lt;/li&gt;
&lt;li&gt;$y_t = f(x_t) + \varepsilon_t$: 入力点 $x_t$ に対する観測&lt;/li&gt;
&lt;li&gt;$\varepsilon_t \sim \mathrm{i.i.d.}\ \mathcal{N}(0, \sigma^2)$: 観測ノイズ&lt;/li&gt;
&lt;li&gt;$\mathcal{D}_t = \{(x_i, y_i)\}_{i=1}^{t}$: $t$ ステップまでに得られたデータ集合&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;記号&#34;&gt;記号&lt;/h3&gt;
&lt;p&gt;証明では次の記号を用います。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$k(x, x&#39;)$: カーネル関数&lt;/li&gt;
&lt;li&gt;$\bm{k}_n(x) = [k(x, x_1),\ k(x, x_2),\ \dots,\ k(x, x_n)]^\top$&lt;/li&gt;
&lt;li&gt;$\bm{K}_n$: カーネル行列($(i, j)$ 成分が $k(x_i, x_j)$ である $n \times n$ 行列)&lt;/li&gt;
&lt;li&gt;$\tilde{\bm{K}}_n = \bm{K}_n + \sigma^2 \bm{I}_n$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;逐次更新の場合&#34;&gt;逐次更新の場合&lt;/h2&gt;
&lt;h3 id=&#34;観測1回目-&#34;&gt;観測1回目 ($t=1$)&lt;/h3&gt;
&lt;p&gt;入力空間 $\mathcal{X}$ の中で一様分布に従って $x_1$ を選択します。関数 $f$ は $\mathcal{GP}(0, k)$ に従うので&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#34;Introduction to Flow Matching and Diffusion Models&#34; のメモ</title>
      <link>https://ymgmr.pages.dev/posts/diffusion-and-flow-models/</link>
      <pubDate>Sat, 28 Feb 2026 11:34:21 +0900</pubDate>
      <guid>https://ymgmr.pages.dev/posts/diffusion-and-flow-models/</guid>
      <description>&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;「&lt;a href=&#34;https://diffusion.csail.mit.edu/2026/index.html&#34;&gt;Introduction to Flow Matching and Diffusion Models&lt;/a&gt;」(MIT IAP 2026) のコース資料を基にフローマッチングと拡散モデルについて勉強した際の日本語メモです。&lt;/p&gt;
&lt;h2 id=&#34;生成モデルとsde&#34;&gt;生成モデルとSDE&lt;/h2&gt;
&lt;h3 id=&#34;データ分布からのサンプリング--生成&#34;&gt;データ分布からのサンプリング = “生成”&lt;/h3&gt;
$$
z_\text{new} \sim p_\text{data}
$$&lt;p&gt;データ分布 $p_\text{data}$ の確率密度は未知&lt;/p&gt;
$$
p_\text{data}: \mathbb{R}^d \rightarrow \mathbb{R}_{\geq 0}, \\
z \mapsto p_\text{data}(z)
$$&lt;h3 id=&#34;条件付き生成--条件付き確率分布からのサンプリング&#34;&gt;条件付き生成 = 条件付き確率分布からのサンプリング&lt;/h3&gt;
&lt;p&gt;条件ベクトル $y$ を用いて&lt;/p&gt;
$$
z_\text{new} \sim p_\text{data}(\cdot|y)
$$&lt;h3 id=&#34;ピカールリンデレフの定理&#34;&gt;ピカール・リンデレフの定理&lt;/h3&gt;
&lt;p&gt;ベクトル場 $u_t = u_t(x)$ について $u$ が $x$ について連続微分可能であるなら初期値条件 $X_0=x_0$ を満たす常微分方程式&lt;/p&gt;
$$
\frac{\text{d}}{\text{dt}}X_t = u_t(X_t)
$$&lt;p&gt;の解は一意に存在する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ベクトル場&lt;/p&gt;
&lt;p&gt;空間中の1点 $\bold{r}$ を指定すると $\bold{r}$ の関数としてベクトルが1つ決まるような関数。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;例&#34;&gt;例&lt;/h4&gt;
&lt;p&gt;$u_t(x) = -\theta x$ のときを考えると常微分方程式 $\frac{\text{d}}{\text{dt}}X_t = u_t(X_t)$ の解は、$X_t = Ce^{-\theta t}$ となる。初期条件 $X_0=x_0$ より $C=x_0$ だから $X_t = x_0e^{-\theta t}$&lt;/p&gt;</description>
    </item>
    <item>
      <title>拡散モデルの先読み勾配ガイダンス</title>
      <link>https://ymgmr.pages.dev/posts/gradient-guidance-diffusion/</link>
      <pubDate>Sun, 28 Dec 2025 11:34:21 +0900</pubDate>
      <guid>https://ymgmr.pages.dev/posts/gradient-guidance-diffusion/</guid>
      <description>&lt;p&gt;NeurIPS 2024 に採択された論文 &lt;a href=&#34;https://arxiv.org/abs/2404.14743&#34;&gt;&amp;ldquo;Gradient Guidance for Diffusion Models: An Optimization Perspective&amp;rdquo;&lt;/a&gt; (Guo et al. 2024) を読んでみたので紹介します。&lt;/p&gt;
&lt;p&gt;拡散モデルにおいて Classifier Guidance / Classifier-free Guidance などを用いたガイダンス手法が広く用いられているなか、この論文はユーザーが定義した任意の目的関数 $f$ を最大化するようにガイダンスを行うための手法について検討しています。&lt;/p&gt;
&lt;p&gt;この論文では単純な勾配 $\nabla f$ を用いた勾配法による最適化では生成物が崩壊してしまうことを示し、&amp;ldquo;Look-ahead Loss&amp;rdquo; という損失を定義し、生成されたデータによるスコア関数のファインチューニングを繰り返しながら最小化するようなガイダンス手法を提案しています。&lt;/p&gt;
&lt;h2 id=&#34;1-背景と課題&#34;&gt;1. 背景と課題&lt;/h2&gt;
&lt;p&gt;拡散モデルにおいて、拡散過程を $\mathrm{d}\mathbf{x} = f( t)\mathbf{x}\mathrm{d}t + g(t)\mathrm{d}\mathbf{w}$ と表す場合の逆拡散過程は次のような確率微分方程式(SDE)で表されます。&lt;br&gt;
($\mathrm{d}t$: 無限小ステップ, $\bar{\mathbf{w}}$: 時刻 $T \rightarrow 0$ まで逆向きにたどった際の標準ウィーナー過程)
&lt;/p&gt;
$$\mathrm{d}\mathbf{x} = [f(t)\mathbf{x}-g(t)^2\nabla_\mathbf{x}\log p_t(\mathbf{x})]\mathrm{d}t + g(t) \mathrm{d}\bar{\mathbf{w}}$$&lt;p&gt;論文では拡散過程・逆拡散過程を以下のように表記しています。
&lt;/p&gt;
$$\mathrm{d}{X}_t = -\frac12 q(t){X}_t\mathrm{d}t + \sqrt{q(t)}\mathrm{d}{W}_t\tag{1}$$&lt;p&gt;
&lt;/p&gt;
$$\mathrm{d}X_t^{\leftarrow} = \left[ \frac{1}{2}X_t^{\leftarrow} + \nabla \log p_{T-t}(X_t^{\leftarrow}) \right] \mathrm{d}t + \mathrm{d}\overline{W}_t \tag{2}$$&lt;p&gt;ここで、ベイズの定理より条件付きスコアが以下のように展開できることを考えます。
&lt;/p&gt;</description>
    </item>
    <item>
      <title>離散拡散モデルの分類器フリーガイダンス</title>
      <link>https://ymgmr.pages.dev/posts/discrete-cfg/</link>
      <pubDate>Sat, 13 Dec 2025 11:34:21 +0900</pubDate>
      <guid>https://ymgmr.pages.dev/posts/discrete-cfg/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://arxiv.org/abs/2412.10193&#34;&gt;Simple Guidance Mechanisms for Discrete Diffusion Models (Schriff et al., 2025)&lt;/a&gt; という ICLR2025 に採択された論文で離散拡散モデルに分類器ガイダンス(CG)および分類器フリーガイダンス(CFG)を適用する手法が提案されていたので読んでみました。&lt;/p&gt;
&lt;h2 id=&#34;連続拡散モデルでのcgcfg&#34;&gt;連続拡散モデルでのCG/CFG&lt;/h2&gt;
&lt;p&gt;連続拡散モデルでは $x_{t-1}$ の条件付き確率分布が以下のように表されます。
&lt;/p&gt;
$$p^\gamma(x_{t-1} \mid y, x_t)
\propto
p(y \mid x_{t-1})^\gamma \, p_\theta(x_{t-1} \mid x_t)$$&lt;p&gt;
対数勾配をとると以下のようになります。(分類器ガイダンス)
&lt;/p&gt;
$$\nabla_{x_{t-1}} 
\log p^\gamma(x_{t-1} \mid y, x_t) = \gamma \nabla_{x_{t-1}}\log p(y \mid x_{t-1}) +  \nabla_{x_{t-1}}\log p_\theta(x_{t-1} \mid x_t)$$&lt;p&gt;
ここでベイズの定理より
&lt;/p&gt;
$$\log p_\theta(x_{t-1} \mid y, x_t) = \log p(y \mid x_{t-1}) + \log p_\theta​(x_{t−1}\mid x_t​)−\log p(y\mid x_t​)$$&lt;p&gt;
が成り立ちます。
両辺の勾配をとって
&lt;/p&gt;
$$\nabla_{x_{t-1}}\log p_\theta(x_{t-1}\mid y,x_t) = \nabla_{x_{t-1}}\log p(y\mid x_{t-1}) + \nabla_{x_{t-1}}\log p_\theta(x_{t-1}\mid x_t)$$&lt;p&gt;
これを先ほどの分類器ガイダンスの式に代入して
&lt;/p&gt;</description>
    </item>
    <item>
      <title>離散DDPMの実装</title>
      <link>https://ymgmr.pages.dev/posts/d3pm/</link>
      <pubDate>Fri, 28 Nov 2025 11:34:21 +0900</pubDate>
      <guid>https://ymgmr.pages.dev/posts/d3pm/</guid>
      <description>&lt;p&gt;離散拡散モデルについての理解を深めるために既存の実装を参考にしながらタンパク質配列生成を試してみました。&lt;/p&gt;
&lt;p&gt;参考にした論文&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://arxiv.org/abs/2107.03006&#34;&gt;Structured Denoising Diffusion Models in Discrete State-Spaces&lt;/a&gt; (NeurIPS 2021)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-離散拡散モデルについて&#34;&gt;1. 離散拡散モデルについて&lt;/h2&gt;
&lt;p&gt;本論文(D3PMと呼びます)で紹介されている離散拡散モデルの仕組みについて紹介します。&lt;/p&gt;
&lt;h3 id=&#34;順過程&#34;&gt;順過程&lt;/h3&gt;
&lt;p&gt;離散拡散モデルの拡散過程では以下のようにノイズを載せて拡散していきます。&lt;/p&gt;
$$
q(x_t \mid x_{t-1}) = \text{Cat}(\boldsymbol{x_t}; \boldsymbol{p}=\boldsymbol{x_{t-1}}\boldsymbol{Q_t})
$$&lt;p&gt;ここで $x_t$ は時刻 $t$ におけるタンパク質配列のワンホットベクトル、$Q_t$ は時刻 $t$ における遷移行列を表します。遷移行列の作成方法は様々ですが、今回は論文中で紹介されている Absorbing-state (吸収状態) と呼ばれるものを使います。吸収状態とはアミノ酸が &lt;code&gt;[MASK]&lt;/code&gt; トークンで置換された状態を指します。$Q_t$ は語彙サイズを $K$ として $(K, K)$ の行列であり各要素は以下のようにして決定されます。$m$ は既に &lt;code&gt;[MASK]&lt;/code&gt; トークンに置換されている状態を指します。&lt;/p&gt;
$$
[\boldsymbol{Q}_t]_{ij} =\begin{cases}1 &amp; \text{if } i = j = m \quad  \\1 - \beta_t &amp; \text{if } i = j \neq m \quad \\\beta_t &amp; \text{if } j = m, i \neq m \quad \end{cases}
$$&lt;p&gt;$\beta_t$ の決め方はノイズスケジューリングと呼ばれ様々な方法がありますが、D3PMでは
&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
