【NumPy入門】ベクトルの大きさ(ノルム)を計算するnp.linalg.norm

こんにちは!インストラクターのフクロウです!

ニューラルネットワークの過学習対策でもおなじみのL1ノルム、L2ノルムを計算するnp.linalg.norm関数を紹介します!

使い方はとっても簡単!この記事で

  • ノルムって何?
  • np.linalg.normってどう使うの?
  • 機械学習ではどう使われるの?

の三点を押さえて、使いこなしちゃいましょう!

ノルムって何?

(簡単に言うと)原点などからある点までの距離(大きさ)ノルムといいます。

ノルムにはいくつか種類があって、代表的なものとしてはL0ノルム、L1ノルム、L2ノルムなどがあります。

L0ノルム

これは0以外の値を持つ次元の数のことです。

(ちゃんとした定義を知りたい方は以下の資料を見ましょう。)

L1ノルム

これは各次元の値の絶対値の和のことです。

「マンハッタン距離」という距離の考え方と同じ計算式です。

L2ノルム

各次元の値を2乗した和の平方根がL2ノルムです。

「ユークリッド距離(普通の距離のことです)」という距離の考え方と同じ計算式です。

L2ノルムは中学校でも習ったおなじみのものです。

下のグラフの矢印の長さを求めます。

import numpy as np
import matplotlib.pyplot as plt

plt.figure()

# 矢印(ベクトル)の始点
O = np.array([0,0])
# 矢印(ベクトル)の成分
X = np.array([4,3])

# 矢印(ベクトル)
plt.quiver(O[0],O[1],
           X[0],X[1], 
           angles='xy',scale_units='xy',scale=1)

# グラフ表示
plt.xlim([-5,5])
plt.ylim([-5,5])
plt.grid()
plt.draw()

np.linalg.normの使い方

np.linalg.normはノルムを計算する関数です。

引数に配列を渡せば他のNumPy関数同様に計算してくれます。

大事な引数であるordを中心にコードを見てみましょう。

ordはL0, L1, L2などの指定に使うパラメータです。

L0ノルム

Xの中で0でない値は2つなので……

>>> np.linalg.norm(X, ord=0)

2.0

L1ノルム

要素の絶対値の和は7なので……

>>> np.linalg.norm(X,ord=1)

7.0

>>> np.sum(np.abs(X))

7

L2ノルム

三平方の定理を思い出してください。

>>> np.linalg.norm(X, ord=2)

5.0

>>> np.sqrt(np.sum(np.abs(X**2)))

5.0

ノルムって何に使えるの?

ノルムの計算、特にL1ノルムやL2ノルムは、ニューラルネットワークの不要なパラメータを削ったり過学習を防ぐために使われています。

L1正則化、L2正則化などと呼ばれるものです。

結合重みのノルムを計算して、この値を損失関数にペナルティ項として追加することで利用します。

詳しく知りたい方は以下の記事がおすすめです。

まとめ

この記事では、NumPyでノルムを計算する関数「np.linalg.norm」を紹介しました。

機械学習の実装ではL1ノルムやL2ノルムが大活躍しますよ。

使い方も簡単なので、是非使ってみてください!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説