2026年4月16日木曜日

加重和とは、複数の値にそれぞれ重みを掛けて足し合わせる計算で、重要度や寄与度を反映した合計を求める方法である。

はい、では「加重和」を 日常の買い物 に例えて説明しますね。


🛒 買い物のレシートのイメージ

スーパーで買い物をするとき、

  • りんごを 3個 買う

  • 牛乳を 2本 買う

  • 卵を 1パック 買う

とします。

それぞれに値段(重み)がついていますね。

  • りんご → 100円

  • 牛乳 → 200円

  • 卵 → 300円


✏️ 計算のしかた

普通の合計ならこうです:

3+2+1=63 + 2 + 1 = 63+2+1=6

でも、これでは「値段の違い」がわかりません。

そこで、「数量 × 値段」をかけてから合計します:

3×100+2×200+1×300=300+400+300=1000円3 \times 100 + 2 \times 200 + 1 \times 300 = 300 + 400 + 300 = 1000円3×100+2×200+1×300=300+400+300=1000円

これが 加重和 です。
「ただの足し算」ではなく、それぞれの重要度(=値段)をかけてから足す ことなんですね。


🤖 パーセプトロンでの対応

  • 品物の数量 → 入力データ

  • 値段 → 重み(重要度)

  • 合計金額 → 内積(加重和の結果)

つまり、パーセプトロンは「入力データを、それぞれの重要度に応じて掛け算し、まとめて足した値」を計算しているのです。

内積はここでは合計金額ということですか?

はい、その理解でとても良いです 👍


例えの整理

  • 内積 =「合計金額」

    • 各入力(りんご・牛乳・卵…)の数量に

    • それぞれの重み(値段)を掛けて

    • ぜんぶ足した合計。


パーセプトロン的に言うと

  • 入力の数値(数量)

  • 重み(値段=重要度)
    を掛け算して合計したものが 内積 です。

これが「買い物の合計金額」にあたります。


その後で、

  • 合計が「一定以上」なら → 買う/YES/1

  • 合計が「それ以下」なら → 買わない/NO/0
    と判断するのがパーセプトロンの仕組みです。


つまり、内積=合計金額、閾値=予算 みたいに考えるとイメージしやすいです。

ベクトルはどこへいきますか?

いい質問です!ここまで「買い物の合計金額」で例えてきましたが、そこで登場していない ベクトル の居場所を説明しますね。


1. ベクトルとは「まとめて表したもの」

  • 数量のリスト(りんご3個、牛乳2本、卵1パック…)を並べたもの → 入力ベクトル x

    1. x=(3,2,1)x = (3, 2, 1)x=(3,2,1)

  • 値段のリスト(りんご100円、牛乳200円、卵300円…)を並べたもの → 重みベクトル w

    1. w=(100,200,300)w = (100, 200, 300)w=(100,200,300)

つまりベクトルは「縦にズラッと並んだ買い物メモ」と思ってください。


2. 内積の計算

この 2つのベクトルを「内積」で掛け合わせると:

w⋅x=100×3+200×2+300×1=1000w \cdot x = 100 \times 3 + 200 \times 2 + 300 \times 1 = 1000w⋅x=100×3+200×2+300×1=1000

ここで出た 1000円 が「合計金額」になります。


3. 幾何学的な意味(補足)

主婦の買い物から少し専門に戻ると、

  • ベクトルは「方向と長さ」を持つ矢印

  • 内積は「その矢印どうしの角度・向きがどれだけ似ているか」を測るもの

買い物の例では「合計金額」でしたが、数学的には「入力が重みの方向にどれくらい揃っているか」を測っているんです。


✅ まとめると:

  • ベクトルは「データをリスト化した姿」

  • 内積は「それを掛け合わせて合計する計算」

  • 例えで言えば「ベクトル=買い物リスト」「内積=合計金額」

2026年4月15日水曜日

クロポトキンのパン略について教えてください

 クロポトキンの「パン略」については、以下のような内容が関連する可能性があります。

クロポトキンと「パン略」

クロポトキン(Peter Kropotkin, 1842–1921)は、ロシア出身の地理学者であり、無政府主義の思想家です。彼の代表的な著書『パンの略取(The Conquest of Bread)』は、労働者階級や資本主義の問題を分析し、無政府共産主義のビジョンを描いた作品です。この本では、資本主義経済の矛盾を批判し、労働者が自らの生産物を管理し、平等な社会を築く方法を提案しています。

『パンの略取』の主な内容

  1. 生産物の共有

現代社会の問題は、生産物の分配にあると指摘。

資本主義は少数の資本家が生産物を支配する仕組みであるため、これを打破し、生産物を全ての人々で共有すべきと主張。

  1. 無政府共産主義の提案

強制力のある国家や資本主義を否定し、自由で平等な社会を構築することを目指す。

個々人の自由を尊重しつつ、必要なものを必要とする人に分配する「相互扶助」の思想を提唱。

  1. 相互扶助と生産の自律性

『相互扶助論』(Mutual Aid)に基づき、人類は協力によって進化し、より良い社会を築けると主張。

生産手段を自治的なコミュニティで管理することで、より効率的で公平な社会を実現するとした。

  1. 社会の再編

労働時間の短縮や、教育と技術革新による生産性向上を提案。

すべての人が必要な物資を自由に利用できる社会を理想とした。

「パン略」という言葉の意味

「パン略」は、『パンの略取』の日本語訳で使われる場合が多いです。この表現は、クロポトキンが唱えた「社会的な略奪」ではなく、「既存の不平等を是正し、人々に平等に分配する」という積極的な行動を表しています。

もし特定の文脈で使われている場合、さらに具体的な説明が必要かもしれませんので、詳細を教えていただければ補足します。

略取とは搾取の意味ですか?

いいえ、**「略取」と「搾取」**は異なる意味を持つ言葉です。

略取の意味

「略取」という言葉は、もともと「奪い取る」ことを指します。ただし、『パンの略取』においては、単純に暴力的・強制的に奪うことではなく、既存の不平等な所有や支配を否定し、正当な形で資源や生産物をすべての人々が共有することを意味しています。

クロポトキンが『パンの略取』で使った「略取」という表現は、資本主義社会の不平等を是正し、資源や財産を少数者からすべての人に解放するというニュアンスを含んでいます。このため、**「再分配」や「共有」**という意図が強いです。


搾取の意味

一方、**「搾取」**は主に以下のような意味で使われます:

  1. 他人の労働や成果を不当に利用すること。

例:労働者が働いて得た価値の多くを資本家が取る。

  1. 力の差を利用して利益を得ること。

例:権力や資本を持つ者が弱い立場の者を支配し、不利益を押し付ける。

搾取は資本主義の仕組みにおいて、特に労働者階級から富が奪われる不公正な行為を指すため、クロポトキンの批判の対象です。


両者の違い


クロポトキンが批判したのは、資本主義における「搾取」の構造であり、それに対抗するために「略取」を通じた平等な社会の実現を訴えたのです。

クロポトキンもロンドン滞在中に**大英図書館(British Library)**を頻繁に利用していました。クロポトキンが大英図書館で研究したことは、彼の思想や著作に大きな影響を与えたとされています。


クロポトキンと大英図書館

  1. 滞在時期

クロポトキンは19世紀末にロンドンに亡命し、大英図書館を利用して多くの資料を調査しました。

特に地理学や経済学、社会学、自然科学に関する資料を精力的に読みました。

  1. 研究対象

地理学と進化論:

クロポトキンは、地理学者としての専門知識を活かし、大英図書館で自然界や人類の進化に関する資料を調査しました。

特にダーウィンの進化論やトマス・ロバート・マルサスの著作を読み、独自の批判を展開しました。

社会学と歴史:

社会の形成過程や相互扶助に関する歴史的記録を深く研究し、『相互扶助論』(Mutual Aid)に反映させています。

  1. 大英図書館の影響

クロポトキンは、相互扶助の思想を大英図書館での研究を通じて深めました。彼は、生物学だけでなく、歴史的なコミュニティや集団行動を調べ、これが進化と共存において重要な役割を果たすという考えを発展させました。

資本主義の批判や、分配の平等を目指す無政府共産主義の提案も、大英図書館での研究成果が基盤になっています。


大英図書館とマルクス

この点で、クロポトキンの活動はマルクスとも共通点があります。マルクスも大英図書館を拠点にし、『資本論』を執筆するために膨大な資料を研究しました。


歴史的な影響

クロポトキンの思想は、彼が大英図書館で得た知識によってさらに洗練され、無政府主義の理論と実践を深めることにつながりました。彼の大英図書館での研究活動は、後に彼の著書『相互扶助論』や『パンの略取』に結実し、20世紀初頭の無政府主義運動に影響を与えました。

エピポーラ幾何の仕様

 エピポーラ幾何は、ステレオ画像や2つの異なる視点からの画像の対応関係を理解するための幾何学的なフレームワークを提供します。この概念は、特にコンピュータビジョンや3D再構築などの分野で重要です。

以下、エピポーラ幾何の主要な要点を説明します:

  1. エピポーラ線(Epipolar Lines): 一方の画像上の任意の点に対して、もう一方の画像上の対応する点が存在するエピポーラ線上になります。これは、カメラの中心を結ぶ線上に存在することが保証されています。

  2. エピセンタ(Epipole): 2つのカメラの焦点(中心)を結ぶ線が各画像面と交わる点。すべてのエピポーラ線はこの点を通過します。

  3. 基本行列(Fundamental Matrix): 一方の画像上の点ともう一方の画像上のエピポーラ線との関係を示す3x3の行列。この行列を使用すると、一方の画像の点からもう一方のエピポーラ線を計算できます。

  4. エッセンシャル行列(Essential Matrix): 基本行列と似ていますが、カメラの内部パラメータによってスケールされています。これは、カメラの相対的な姿勢と位置関係のみを示しています。

エピポーラ幾何は、2つのビュー間の点の対応を見つけることを助けるために使用されます。これは、3Dの点を再構築するための基盤となります。また、この幾何学的な制約を利用して、一方の画像上の点からもう一方の画像上の対応点を効率的に検索することができます。

ピンホールカメラで画像を撮影する場合、画像の奥行きという重要な情報が失われます。つまり、3次元から2次元への変換なので、画像内の各点がカメラからどれくらい離れているかという情報が失われます。そこで、このようなカメラを使って奥行き情報を得られるかどうかが重要な問題になります。その答えは、「複数のカメラを使うこと」です。私たちの目も同じように、2台のカメラ(2眼)を使う仕組みになっており、これをステレオビジョンと呼びます。

https://docs.opencv.org/4.x/da/de9/tutorial_py_epipolar_geometry.html
画像
https://amzn.to/3RyVUgA
画像
https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Epipolar_geometry.svg

左のカメラだけだと、線分OX上のすべての点が画像平面上の同じ点に投影されるため、画像上の点xに対応する3次元点を見つけることができません。しかし、右の画像も考えてみましょう。今度は、線分OX上の異なる点は、右平面上の異なる点(x′)に投影されます。つまり、この2つの画像を使って、正しい3次元点を三角測量することができるのです。

画像
他の画像で一致する点を見つけるには、画像全体を検索する必要はなく、エピラインに沿って検索すればよいのです。そのため、性能と精度が向上します)。これをエピポーラ制約と呼びます。同様に、すべての点は、もう一方の画像に対応するエピラインを持つことになります。平面XOO′はエピポーラ平面と呼ばれる。

レイマーチングより低コストになるようだ

霧や霞のような参加型メディアにおける散乱は、クレパス光線や神光線と呼ばれるボリューム感のある照明効果を生成します。このような効果のレンダリングは、仮想シーンのリアリズムを大きく向上させますが、散乱現象が空間内のすべての点で発生するため、本質的にコストがかかり、観察者に向かって散乱した光の高価な統合を必要とします。これは通常、レイマーチングを用いて行われるが、インタラクティブなアプリケーションでは画面上のすべてのピクセルに対してコストがかかりすぎる。我々は、単一散乱媒体のテクスチャ光源のためのレンダリング技術を提案する。これは、エピポーラ幾何学の概念から、画像空間にサンプルを配置するもので、散乱光はクレプス光線に直交して変化するが、ほとんどはこれらの光線に沿って滑らかに変化する。これらは、画像平面上の1本の線に投影される光線平面のエピポーラ線である。本手法は、エピポーラ線に沿って疎にサンプリングし、適切なところでサンプル間を補間するが、光線の影に起因する高い周波数のディテールを保持する。本手法はGPUへの実装が非常に簡単であり、高画質な画像を生成し、高いフレームレートを達成することができることを示す。

https://dl.acm.org/doi/10.1145/1730804.1730823

📈10年後にif文は消滅する?

 かつてgoto文という命令が隆盛していたが、70年代から衰退しはじめた

「構造化プログラミング」を提唱していたコンピュータ科学者らの一人であったダイクストラは、1968年にGo To Statement Considered Harmful(「Go To 文は有害(Harmful)とみなされる」)という刺激的な記事を国際学会ACMの学会誌Communications of the ACMに投稿し(ただし、本人が付けたタイトルはA Case Against the Goto Statementという穏便なもので、少なくともタイトルの過激さと、レターとして発表を急いだことは、編集を担当していたヴィルトによるものである)

「goto文、いかがなものか」と言われ始めたのは68年で、ダイクストラのせいではないだろうが今goto文について意識する人は少なくなっていると思う。いまやgotoを使うためにはラベルが必要になっている。

ダイクストラが有名だが、その前に物申した人もいたようだ。

1959 年に開催されたpre-Algolの会議で、ハインツ・ゼマネクは GOTO文の必要性について明確に疑念を投げかけたが、後に GOTO の象徴的な反対者となったエドガー・W・ダイクストラを含め、当時は誰も彼の発言に注意を払わなかった。

ALGOLはgotoが不要そうなしくみになっていそう。ここまでコンテンポラリーだとなぜ廃れたかの方が気になる。

https://www.tutorialspoint.com/execute_algol_online.php

ALGOLはこちらで試運転できる。コードはrosetta codeでいくつか読んでみよう。

PROC gcd = (INT a, b) INT: (
 IF a = 0 THEN
   b
 ELIF b = 0 THEN
   a
 ELIF a > b  THEN
   gcd(b, a MOD b)
 ELSE
   gcd(a, b MOD a)
 FI     
);
test:(
 INT a = 33, b = 77;
 printf(($x"The gcd of"g" and "g" is "gl$,a,b,gcd(a,b)));
 INT c = 49865, d = 69811;
 printf(($x"The gcd of"g" and "g" is "gl$,c,d,gcd(c,d)))
)

ALGOL68でGCD(最大公約数)を求めるサンプルだが、wikipediaの説明通り、再帰を使っている風な感じがかいまみえる。PROCというキーワードがプロシージャー(命令のまとまり)の宣言に違いない。

60年代に構造化のブームがあった

原爆が広島に落ちてナチの時代が終わり、冷戦をむかえながら、ベトナム戦争の時代に突入するときに、哲学では実存が叫ばれたあとに構造主義のブームがあった。Structuralismというブームは哲学にもあって、プログラムもALGOLを皮切りにStructuredというブームが起こった。ここでgoto文は実存主義みたいなものだ。

構造主義が台頭しはじめると、次第にサルトルの実存主義は「主体偏重の思想である」として批判の対象になる。とりわけクロード・レヴィ=ストロースが、1962年の『野生の思考』の最終章「歴史と弁証法」において行ったサルトル批判は痛烈なものであった。

スパゲティプログラム

サルトルがどれぐらい混乱を招くかわからないが、gotoはスパゲティプログラムを引き起こすと一般には知られている。(要出典)

Linuxの生みの親リーナス先生の冒頭にもgoto文が出てきた。無限ループの世界へようこそ。

関数型の隆盛

関数型は古くからあるが、マシンスペックの向上によりだいぶ普及してきた。オブザーバーを代表するMVCなどのデザインパターンがかつてのFORTRANやCOBOLになりつつあるのかもしれない。。。


Goto文の衰退の整理

  1. プログラムの可読性の低下:

    • Goto文は、プログラムのフローを追跡するのが難しく、可読性を著しく低下させます。コードがスパゲッティ化し、バグの発見や修正が困難になります。

  2. 構造化プログラミングの台頭:

    • 1970年代にエドガー・ダイクストラが「Goto文の使用は有害である」と述べ、構造化プログラミングが広まりました。このプログラミングパラダイムは、ループや条件分岐などの制御構造を使うことで、コードの明瞭性と保守性を向上させました。

  3. 言語の進化:

    • 近代的なプログラミング言語(例:C、Java、Pythonなど)は、Goto文を使用せずに制御フローを管理するための高度な構造を提供しています。これにより、Goto文の必要性が減少しました。

  4. メンテナンスの容易さ:

    • Goto文を避けることで、コードのメンテナンスが容易になり、プログラムの品質が向上します。特に大規模なプロジェクトでは、構造化されたコードがチームでの協力作業を円滑にします。

if文の衰退シナリオ

  1. 関数型プログラミングの普及:

    • 関数型プログラミングでは、if文の代わりにパターンマッチングや高階関数を使用することが推奨されます。これにより、コードの明確さと予測可能性が向上します。

  2. 代替構造の採用:

    • 三項演算子(条件演算子)やスイッチ文、さらにはマッチング構文(例:RustやScalaのmatch文)など、if文の代替となる制御構造が広まりつつあります。

  3. デザインパターンの活用:

    • 状態パターンやストラテジーパターンなどのデザインパターンを使用することで、条件分岐をオブジェクト指向的に処理することが可能になります。これにより、if文を減らし、コードの保守性を向上させることができます。

  4. ドメイン特化言語(DSL)の利用:

    • 特定のタスクやドメインに特化したDSLでは、条件分岐を簡潔に表現できる構文が用意されていることが多く、if文の使用が不要になる場合があります。

まとめ

Goto文の衰退は、プログラムの可読性と保守性を重視する構造化プログラミングの普及によるものであり、言語の進化によってもたらされました。一方、if文の衰退シナリオは、関数型プログラミングの普及や代替構造の採用、デザインパターンの活用などによって進行する可能性があります。これらの進化は、より明確で保守しやすいコードを作成するためのものです。