<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>アナログ回路</title><link>https://blog.ast.moe/tags/%E3%82%A2%E3%83%8A%E3%83%AD%E3%82%B0%E5%9B%9E%E8%B7%AF/</link><description>Recent posts from 五里霧中</description><generator>Hugo</generator><item><title>アナログ回路で機械学習はできるのか</title><link>https://blog.ast.moe/blog/2026-08-12-2/</link><pubDate>Wed, 12 Aug 2026 21:01:23 +0900</pubDate><guid>https://blog.ast.moe/blog/2026-08-12-2/</guid><description>&lt;h2 id="アナログ回路で機械学習ができたら面白いのでは"&gt;アナログ回路で機械学習ができたら面白いのでは？&lt;/h2&gt;
&lt;p&gt;近年LLMが流行ってますがGPUとかお金も電気もたくさんかかるしこれをアナログ回路でやったら面白いのでは？と思いました。&lt;/p&gt;
&lt;p&gt;ニューラルネットワークがやっている計算は掛け算と足し算です。&lt;/p&gt;
&lt;p&gt;というわけで今回は基礎理論からざっくり整理しようと思う。&lt;/p&gt;
&lt;h2 id="アナログ計算とは"&gt;アナログ計算とは&lt;/h2&gt;
&lt;p&gt;デジタル計算機では数値を0と1の組み合わせとして表現します。計算の途中で少し電圧が変化しても0と1を区別できる範囲なら元の情報を復元できます。&lt;/p&gt;
&lt;p&gt;一方、アナログ計算機では電圧や電流などの連続した物理量を数値に対応させます。&lt;/p&gt;
&lt;p&gt;例えば、0ボルトを0、1ボルトを1と決めれば、0.5ボルトを0.5として扱えます。実際には回路の電源電圧や扱いたい数値の範囲に合わせて数値と電圧の対応関係を決めます。&lt;/p&gt;
&lt;p&gt;アナログ計算機は計算手順を一個ずつ実行するというより物理現象そのものを計算に利用します。&lt;/p&gt;
&lt;p&gt;回路に電圧を加えると電流が流れ、回路全体が物理法則に従った状態になります。そのときの電圧や電流を読み取ると、計算結果が得られるという考え方です。&lt;/p&gt;
&lt;p&gt;もちろんアナログ回路の電圧や電流は、雑音、温度変化、部品のばらつきなどの影響を受けます。こういう扱いづらさが面倒なので、現在はデジタル計算機が主流になっています。&lt;/p&gt;
&lt;p&gt;とはいえニューラルネットワークのように多少の誤差を許容できる処理ならアナログ計算を使える可能性があります。&lt;/p&gt;
&lt;h2 id="ニューラルネットワークの計算"&gt;ニューラルネットワークの計算&lt;/h2&gt;
&lt;p&gt;とりあえずニューラルネットワークの中でも一番基本的なニューロンだけ考えます。&lt;/p&gt;
&lt;p&gt;ニューロンは複数の入力を受け取りそれぞれに重みを掛けてから合計します。&lt;/p&gt;
&lt;p&gt;入力を &lt;code&gt;x_1, x_2, ..., x_n&lt;/code&gt;、重みを &lt;code&gt;w_1, w_2, ..., w_n&lt;/code&gt; とすると、やっていることはまず次の計算です。&lt;/p&gt;
&lt;p&gt;$$
z=\sum_{i=1}^{n}w_i x_i+b
$$&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b&lt;/code&gt; はバイアスです。&lt;/p&gt;
&lt;p&gt;そのあと計算結果 &lt;code&gt;z&lt;/code&gt; を活性化関数へ通します。&lt;/p&gt;
&lt;p&gt;$$
y=f(z)
$$&lt;/p&gt;
&lt;p&gt;なのでニューロンの処理は次の二つに分けて考えられます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;入力と重みを掛けて、すべて足し合わせる&lt;/li&gt;
&lt;li&gt;合計値を活性化関数へ通す&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;このうち最初の計算を積和演算と呼びます。ニューラルネットワークではこの積和演算を大量にやっています。&lt;/p&gt;
&lt;p&gt;というわけで、積和演算を電圧と電流で表せないかを考えます。&lt;/p&gt;
&lt;h2 id="オームの法則で掛け算っぽいことをする"&gt;オームの法則で掛け算っぽいことをする&lt;/h2&gt;
&lt;p&gt;抵抗器に電圧 &lt;code&gt;V&lt;/code&gt; を加えると、オームの法則によって電流 &lt;code&gt;I&lt;/code&gt; が流れます。&lt;/p&gt;
&lt;p&gt;$$
I=\frac{V}{R}
$$&lt;/p&gt;
&lt;p&gt;&lt;code&gt;R&lt;/code&gt; は抵抗値です。&lt;/p&gt;
&lt;p&gt;ここで抵抗値の逆数をコンダクタンス &lt;code&gt;G&lt;/code&gt; と呼ぶことにします。&lt;/p&gt;
&lt;p&gt;$$
G=\frac{1}{R}
$$&lt;/p&gt;
&lt;p&gt;これを使うと、オームの法則は次のように書けます。&lt;/p&gt;
&lt;p&gt;$$
I=GV
$$&lt;/p&gt;
&lt;p&gt;この形は掛け算そのものです。&lt;/p&gt;
&lt;p&gt;ニューラルネットワークの入力 &lt;code&gt;x&lt;/code&gt; を電圧 &lt;code&gt;V&lt;/code&gt;、重み &lt;code&gt;w&lt;/code&gt; をコンダクタンス &lt;code&gt;G&lt;/code&gt; に対応させると、次のようになります。&lt;/p&gt;</description></item></channel></rss>