[AI数理]対数関数の微分法・後編

[AI数理]対数関数の微分法・後編

おはようございます!(株) Qualiteg 研究部です。

本日は対数関数の微分法の後編です!

今回で、対数関数の微分法をマスターしましょう!

2. 対数関数の公式

まず、対数関数の公式をおさえておきます。あとで対数関数の微分法の導出で使用します

\(a^{0} = 1\) 、つまり \(a\) を \(0\) 乗すると \(1\) となるため

$$
\log_a 1 = 0 \tag{2.1}
$$

\(a^{1} = a\) 、つまり \(a\) を \(1\) 乗すると \(a\) となるため

$$
\log_a a = 1 \tag{2.2}
$$

積の対数

$$
\log_a (X \times Y) = \log_a X + \log_a Y \tag{2.3}
$$

商の対数

$$
\log_a ( \frac Y X) = \log_a Y - \log_a X \tag{2.4}
$$

 

式 \((2.4)\) で \(Y=1\) のとき、 \(log_a Y = log_a 1 = 0\) となるので

$$
\log_a ( \frac 1 X) = -\log_a X \tag{2.5}
$$

累乗の対数

$$
\log_a (X^{Y}) = Y \log_a X \tag{2.6}
$$

 

底の変換公式

$$
\log_a b = \frac {\log_c b} {\log_c a} \tag{2.7}
$$

\(c\) は新しい底。 \(a\) と \(b\) が以下のように移動するのが底の変換公式です。

さらっと書きましたが、このテクニックは今回に限らず色々なところで役立ちますので、↓を忘れないようにしましょう。

3. 対数関数の微分

さて、以下が対数関数の微分の公式です。

対数関数の微分の公式

$$
f(x) = \log_a x
$$

を \(x\) で微分した \(f'(x)\) は

$$
f'(x) = \frac{1}{x \log_e a} \tag{3.1}
$$

となります


\(e\) を底とする対数関数

$$
g(x) = \log_e x
$$

を \(x\) で微分した \(g'(x)\) は

$$
g'(x) = \frac{1}{x} \tag{3.2}
$$

となります。

なぜなら式 \((3.1)\) の \(a\) に ネイピア数 \(e\) を代入して \(g'(x) = \frac{1}{x \log_e e}\) であるが、 \(\log_e e = 1\) であるので \(g'(x) = \frac{1}{x}\) が導けるというわけす。

4. 対数関数の微分を導出する

さて、先に微分の公式を示してしまいましたが、そこまでは前菜。

ここがメインディッシュです。

前述した対数関数の微分の公式 式 \((3.1)\) を、いままで見てきた道具を使って導き出していきましょう

$$
f(x) = \log_a x
$$

を微分の公式にあてはめると

$$
\begin{aligned}
f'(x) = &\lim_{h \to 0} \frac {f(x+h)-f(x)} {h}& \
=& \lim_{h \to 0} \frac {\log_a (x+h) - \log_a x} {h} &\
\end{aligned}
$$

となるので、 \(\frac {1}{h}\) をつかった表現にすると

$$
f'(x) = \lim_{h \to 0} \frac {1} {h} (\log_a (x+h) - \log_a x) \tag{4.1}
$$

となります。

ここで、

\((x+h) = Y\)、 \(x = X\) と置くと

$$
\log_a (x+h) - \log_a x = \log_a Y - \log_a X
$$

となります。

商の対数 の公式 \((2.4)\)

$$
\log_a ( \frac Y X) = \log_a Y - \log_a X \tag{2.4}
$$

を活用すると \(\log_a Y - \log_a X\) は \(\log_a ( \frac Y X)\) となるので

ここまでの展開を列挙すると

$$
\begin{aligned}
&\log_a (x+h) - \log_a x&\
= &\log_a Y - \log_a X& \
= &\log_a ( \frac Y X)&
\end{aligned}
$$

となります。

ここで、 \(X = x\) と \(Y= (x+h)\) だったので、

$$
\begin{aligned}
\log_a ( \frac Y X)= \log_a ( \frac {x+h}{x})\
\end{aligned}
$$

となるので、ここまでの展開を再度列挙すると

$$
\begin{aligned}
&\log_a (x+h) - \log_a x&\
= &\log_a Y - \log_a X& \
= &\log_a ( \frac Y X)&\
= &\log_a ( \frac {x+h}{x})&
\end{aligned}
$$

となります。

これを式 \((4.1)\) に反映すると、

$$
f'(x) = \lim_{h \to 0} \frac {1} {h} (\log_a (x+h) - \log_a x) = \lim_{h \to 0} \frac {1} {h} (\log_a ( \frac {x+h}{x})) \tag{4.2}
$$

となります。

累乗の対数 の公式 \((2.6)\) より \(Y \log_a X = \log_a (X^{Y})\) なので、\(Y = \frac {1}{h}\) 、 \(X=\frac {x+h}{x}\) とおくと

$$
\begin{aligned}
f'(x) = &\lim_{h \to 0} \frac {1} {h} (\log_a ( \frac {x+h}{x}))
= \lim_{h \to 0} Y (\log_a X)
= \lim_{h \to 0} (\log_a(X^{Y}))&\
\
&となるので、X と Y を戻すと、&\
\
& \lim_{h \to 0} Y (\log_a X) = \lim_{h \to 0} (\log_a(\frac {x+h}{x})^\frac {1} {h}) となります。& \
\
さらに &\frac {x+h}{x} = 1 + \frac {h}{x} なので、&\
\
&\lim_{h \to 0} (\log_a(\frac {x+h}{x})^\frac {1} {h}) = \lim_{h \to 0} (\log_a(1 + \frac {h}{x})^\frac {1} {h})&\
\
&さらに、 \frac{h}{x} = t と置き換えると、&\
&\lim_{h \to 0} →\lim_{t \to 0} となり、 \frac {1} {h} → \frac {1} {tx} となるため &\
\
&\lim_{h \to 0} (\log_a(1 + \frac {h}{x})^\frac {1} {h}) = \lim_{t \to 0} (\log_a(1 + t)^{\frac {1} {tx}}) = \lim_{t \to 0} (\log_a(1 + t)^{\frac {1} {t} \cdot \frac {1} {x}})&\
\end{aligned}
$$

指数関数の公式1.4より \((a^{x})^{y} = a^{xy}\) なので、

$$
\begin{aligned}
f'(x) = &\lim_{t \to 0} (\log_a(1 + t)^{\frac {1} {t} \cdot \frac {1} {x}}) = \lim_{t \to 0} (\log_a ((1 + t)^{\frac {1} {t}})^{\frac {1} {x}})\&
\
\end{aligned}
$$

$$
\begin{aligned}
上式で & \lim_{t \to 0} (1 + t)^{\frac {1}{t}} を e とすると &\
f'(x)=&\lim_{t \to 0} (\log_a ((1 + t)^{\frac {1} {t}})^{\frac {1} {x}})=
\log_a e^{\frac {1}{x}}&
\end{aligned}
$$

さらに 累乗の対数 の公式 \((2.6)\) より
\(\log_a (X^{Y}) = Y \log_a X\) なので、 \(Y = \frac {1}{x}\) 、 \(X = e\) とおくと

$$
f'(x) = \log_a e^{\frac {1}{x}} = \frac{1}{x} \log_a {e} \tag{4.3}
$$

ここで式 \((4.3)\) にある \(\log_a {e}\) に着目する

底の変換公式 式 \((2.7)\) より \(\log_a b = \frac {\log_c b} {\log_c a}\) であるので、 \(b = e\) 、 \(c=e\) とすると

$$
\begin{aligned}
\log_a e = \frac {\log_e e}{\log_e a}
\end{aligned}
$$

となります。

$$
\begin{aligned}
\log_e e = 1 なので&\
&\frac {\log_e e}{\log_e a} = \frac {1}{log_e a}&
\end{aligned}
$$

となり、これで

$$
\log_a e = \frac {1}{log_e a}
$$

であることがわかります。式 \((4.3)\) を \(\log_a e → \frac {1}{log_e a}\) と変形すると

$$
\begin{aligned}
f'(x) = &\frac{1}{x} \log_a {e}&\
=&\frac{1}{x} \cdot \frac {1}{log_e a}&
\end{aligned}
$$

となり、式 \((3.1)\) を導くことができました。

$$
f'(x) = \frac{1}{x \log_e a} \tag{3.1、再掲}
$$

ここまでの導出過程は実際に紙に書いてやってるみるのがオススメです。

なぜなら、類似の導出が今後の LLM 系のテクニックで登場します。
論文や解説などでは、この導出の5,6ステップをしれっと飛ばしていることが多いため、そういう部分でつまづかないために、この基礎段階で1歩ずつ導出していくクセをつけておくと良いと思います。

それではまた次回お会いしましょう!


navigation

Read more

【NPM】クラシックトークンが2025年12月9日に完全廃止されたことに伴うパッケージのインストールエラー(403)と対処法

【NPM】クラシックトークンが2025年12月9日に完全廃止されたことに伴うパッケージのインストールエラー(403)と対処法

こんにちは! 本日は2025年12月9日に行われた npm に関する重要なアップデートについて解説いたします! 2025年12月9日、npmがセキュリティ強化のためclassic tokenを完全に無効化しました。 この影響で、プライベートパッケージを使用しているプロジェクトで突然npm installが失敗するケースが発生しています。(パブリックパッケージの使用には影響はありません) 本記事では、実際に遭遇したエラーと解決方法についてみていきたいと思います。 発生した問題 症状 プライベートパッケージ(@your-org/package-name形式)を含むプロジェクトで npm install を実行すると、以下のようなエラーが発生 パターン1: 404エラー npm ERR! code E404 npm ERR! 404 Not Found - GET https://registry.npmjs.org/@your-org/package-name/... npm ERR! 404 '@your-org/package-name@x.x.

By Qualiteg プロダクト開発部
Anthropic Python SDKのcount_tokens機能が0.75.0~正式版に変わりました:移行ガイド

Anthropic Python SDKのcount_tokens機能が0.75.0~正式版に変わりました:移行ガイド

こんにちは! 本日は Anthropic Claude API を使用するのに便利な Anthropic Python SDK に関する話題です! 2週間ほど前にわりと大きな変更がありましたので、解説いたします。 はじめに 「あれ、client.count_tokens() が動かない...」 Anthropic Python SDKをアップデートしたら、今まで動いていたトークンカウントのコードがエラーになった。そんな経験をされたLLMエンジニアの方も多いのではないでしょうか。 当社のBestllamのように、LLM統合サービスを開発していると、実際にユーザーがどれほどのトークンを使用しているのかを正確に把握することは非常に重要になります。利用料金の計算、コンテキストウィンドウの管理、そしてユーザーへの使用量の可視化など、トークンカウント機能はサービスの根幹を支える機能です。そのため、この機能が突然動かなくなると影響は小さくありません。 ゆえに本番サービスを提供している場合、pip install で気軽にSDKバージョンを上げてはいけません。 さて、Anthropi

By Qualiteg プロダクト開発部
ログを ちょこっと grep するツール "ちょこぐれっぷ" つくりました

ログを ちょこっと grep するツール "ちょこぐれっぷ" つくりました

こんにちは! 今日はちょこっとしたツールをつくりました。 ログをちょこっとgrepするツールです。もちろん無料。 chocoGrep - ちょこっとgrep!ログフィルタツールちょこっとgrepするならchocoGrep!「error or warning」と書くだけの簡単or/and検索。AIエージェントに渡す前にログを最適化。正規表現不要、インストール不要。chocoGrepQualiteg Inc. Cursor、Devin、Claude Code、ChatGPT——AIコーディングエージェントにエラーログを渡してデバッグを手伝ってもらう。もう日常ですよね。 でも、 * ログを全部貼り付けたら、AIの応答がやたら遅い * 「トークン制限を超えました」と怒られる * 大量のログの中から、AIが的外れな部分に注目してしまう そこで、つくったちょこっとgrepするためのツールです 名付けて ちょこぐれっぷ!chogoGrep! chocoGrepって何? ブラウザで動く、ゆるいgrepツールです。 ログを貼り付けて、検索ワードを入れるだけ。インストール不要

By Qualiteg プロダクト開発部
GPUを使った分散処理で見落としがちなCPUボトルネックとtasksetによる解決法

GPUを使った分散処理で見落としがちなCPUボトルネックとtasksetによる解決法

こんにちは! 複数枚のGPUをつかった並列処理システムを設計しているときCPUについてはあまり考えないでシステムを設計してしまうことがあります。 「機械学習システムの主役はGPUなんだから、CPUなんて、あんまり気にしなくてよいのでは」 いいえ、そうでもないんです。 推論中のあるタイミングに急に動作が遅くなったりするときCPUが原因であることがけっこうあります。 概要(5分で分かる要点) 先日GPUを使った並列処理システムで、予期しないCPUボトルネックが発生し、パフォーマンスが大幅に低下する問題に遭遇しました。 複数のプロセスが異なるGPUを使用しているにも関わらず、処理が極端に遅くなる現象の原因は、処理パイプラインの一部に含まれるCPU集約的な計算処理でした。 問題の症状 * 単一プロセス実行時:正常な速度 * 複数プロセス並列実行時:処理時間が数倍に増加 * GPUリソースに競合なし(nvidia-smiで確認済み) 根本原因 処理パイプラインにGPUに適さないCPU集約的な計算(データ前処理、統計変換など)が含まれており、複数プロセスが同じCP

By Qualiteg プロダクト開発部