勾配降下法は、勾配と逆方向に動くことで重みを少しずつ改善します。
w ← w - learning_rate × dL/dw
確率的勾配降下法で sigmoid ニューロンを学習させてください。各エポックでサンプルを与えられた順番どおりに処理し、各サンプルについて:
- z = sample · weights + bias、y = 1 / (1 + e^(-z))
- delta = 2 × (y - target) × y × (1 - y)
- weights[i] ← weights[i] - learning_rate × delta × sample[i](すべての i について)、その後 bias ← bias - learning_rate × delta
train_neuron(samples, targets, weights, bias, learning_rate, epochs) を実装してください。
入力
samples: m 個の学習例。各例は n 個の値を持ちます。
targets: m 個の正しい出力(0 から 1)。
weights, bias: 初期の重み(n 個)とバイアス。
learning_rate, epochs: ステップ幅と、データを何周するか。
出力
学習後の重みと、その後に学習後のバイアス(n + 1 個の数)を返してください。
制約
1 ≤ m ≤ 50、1 ≤ n ≤ 10、1 ≤ epochs ≤ 1,000
0 < learning_rate ≤ 5
-5 ≤ 各値 ≤ 5
例
入力:
bias = 0.0
epochs = 1
samples = [
[1.0]
]
targets = [1.0]
weights = [0.0]
learning_rate = 1.0
期待される出力:
[0.25, 0.25]
解説
y = σ(0) = 0.5、delta = 2 × (0.5 - 1) × 0.25 = -0.25。重み:0 - 1 × (-0.25) × 1 = 0.25。バイアス:0 - 1 × (-0.25) = 0.25。結果は [0.25, 0.25] です。
入力:
bias = 0.0
epochs = 500
samples = [
[0.0, 0.0],
[0.0, 1.0],
[1.0, 0.0],
[1.0, 1.0]
]
targets = [0.0, 0.0, 0.0, 1.0]
weights = [0.0, 0.0]
learning_rate = 2.0
期待される出力:
[6.346558, 6.339863, -9.592092]
解説
これは論理 AND ゲートです。500 エポック後、2つの重みはどちらも大きな正の値になり、バイアスは大きな負の値になるため、入力 [1, 1] だけが 0.5 を超える出力になります。
参考資料
-
例 1 未実行入力:
bias = 0.0 epochs = 1 samples = [ [1.0] ] targets = [1.0] weights = [0.0] learning_rate = 1.0期待される出力:[0.25, 0.25]あなたの出力 -
例 2 未実行入力:
bias = 0.0 epochs = 500 samples = [ [0.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 1.0] ] targets = [0.0, 0.0, 0.0, 1.0] weights = [0.0, 0.0] learning_rate = 2.0期待される出力:[6.346558, 6.339863, -9.592092]あなたの出力
提出時に非公開テスト4件も実行されます。
Pythonオンラインコンパイラ&デバッガー
Pythonコードをオンラインで実行・デバッグできます。サーバーモードでブレークポイントとステップ実行を使え、インストールは不要です。
🐍 このPythonオンライン実行環境について
CodeUtility Python Executor は、ブラウザ上でPythonコードを記述・実行・テストできるツールです — セットアップやインストールは不要です。安全なサンドボックス上で動作し、 3.10 から 3.13 までの実際のPythonバージョンをサポートします。
初めてPythonを学ぶ場合でも、ちょっとしたスニペットを試すときでも、ロジックをデバッグするときでも、 このツールは高速で集中できるコーディング環境を提供します。 内蔵コンソールで自由に試し、結果をすぐに確認できます。
Pythonの練習や素早いプロトタイピングのために軽量なオンラインIDEが必要な、初心者、学生、開発者に最適です。
同じ実行環境で、複数ファイル対応エディター、分離された実行ターミナル、ランタイム別ライブラリ、永続ワークスペース、共有、リアルタイム共同作業を利用できます。
この実行環境の使い方
ランタイムを選択し、ファイルを開くか作成してコードを記述し、[実行]を選択します。出力はターミナルに表示されます。サインインしたユーザーは、ワークスペースにファイルを保存し、ライブラリをインストールして、共有を通じて共同作業できます。
- バージョンを選択して現在のファイルを編集するか、ワークスペース内の別のファイルを開きます。
- コードを実行し、求められた場合はターミナルに入力して、保存された実行履歴を確認します。
- 複数のコードスニペットが必要な作業では、ライブラリ、ワークスペースツール、共有、チャットを利用します。
💡 上のエディタで試せるPythonの基礎とサンプル
1. 変数と定数の宣言
Pythonは動的型付けなので、型を明示的に宣言する必要はありません。組み込みの定数キーワードはありませんが、慣例として定数はすべて大文字で書きます。
# 変数
x = 10
pi = 3.14
name = "Alice"
is_active = True
# 定数(慣例)
MAX_USERS = 100
APP_NAME = "CodeUtility"
# 定数も再代入は可能(強制されない)
MAX_USERS = 200 # ⚠️ 技術的には可能だが非推奨
2. 条件分岐
if、elif、else ブロックでロジックを制御します。Python 3.10以降では、match-case をswitch-caseの代替として使えます。
# 従来の if-elif-else
x = 2
if x == 1:
print("一")
elif x == 2:
print("二")
else:
print("その他")
別案: match-case(Python 3.10+)
# Python 3.10+ が必要
x = 2
match x:
case 1:
print("一")
case 2:
print("二")
case _:
print("その他")
3. ループ
for はシーケンスの反復に使い、while は条件が真の間実行されます。
for i in range(3):
print(i)
count = 3
while count > 0:
print(count)
count -= 1
4. リスト
リストは順序を持つ可変のコレクションです。インデックスで要素にアクセスできます。
fruits = ["りんご", "バナナ"]
print(fruits[0])
print(len(fruits))
5. リストの操作
リストの追加・削除・スライス・反転ができます。内包表記を使うと簡潔に反復処理を書けます。
fruits.append("さくらんぼ")
fruits.insert(1, "キウイ")
fruits.remove("バナナ")
fruits.pop()
print(fruits[1:3])
print(fruits[::-1])
squares = [x*x for x in range(5)]
6. コンソール入出力
input() でユーザーから読み取り、print() で出力を表示します。
\n(改行文字)を使うか、print() を複数回呼び出すことで複数行を表示できます。
# 入力を読む
name = input("あなたの名前を入力してください: ")
print("こんにちは", name)
# 複数行を出力
print("1行目\n2行目\n3行目")
# あるいは print を複数回使う
print("A行")
print("B行")
print("C行")
7. 関数
関数はコードを整理し、再利用を可能にします。引数や戻り値を使いましょう。
def greet(name):
return "こんにちは " + name
print(greet("Alice"))
8. 辞書
キーと値のペアを保持します。キーは一意で、キーを使って値にアクセスします。
person = {"name": "Bob", "age": 25}
print(person["name"])
print(person.get("email", "未設定"))
9. 例外処理
try と except でエラーを捕捉し、適切に処理します。
try:
x = 1 / 0
except ZeroDivisionError:
print("0で割ることはできません")
10. ファイル入出力
open() を使ってファイルの読み書きを行います。
with open("data.txt", "w") as f:
f.write("こんにちは、世界")
with open("data.txt", "r") as f:
print(f.read())
11. 文字列操作
Pythonの文字列には、strip()、replace()、split() など強力なメソッドがあります。
text = " Hello World "
print(text.strip())
print(text.upper())
print(text.replace("Hello", "Hi"))
print(text.split())
12. クラスとオブジェクト
クラスで再利用可能な設計図を定義します。オブジェクトの初期化には __init__ を使います。
class Person:
def __init__(self, name):
self.name = name
def greet(self):
return "こんにちは、私は " + self.name
p = Person("Alice")
print(p.greet())
🐞 Pythonコードをオンラインでデバッグする方法
オンラインPythonデバッガーなら、PythonやIDEをインストールせずにロジックエラーを調査できます。サーバーモードでPython 3.10〜3.13を使用します。
- ランタイムメニューからサーバー版Pythonを選択します。
- 行番号の横をクリックしてブレークポイントを設定します。
- Debugを選択し、最初に一致するブレークポイントまで実行します。
- 現在行と変数を確認し、Continue、Step Over、Step Into、Step Outを使います。
- 終了するときはStopを選択します。
再現可能な小さなコードから始め、値が想定外になる直前にブレークポイントを置きましょう。サーバーモードではworkspaceのファイルやインストール済みライブラリも使えます。