誤差逆伝播法は、出力から入力へ向かって層ごとに連鎖律を適用します。ネットワークは n 個の入力、h 個の隠れニューロン、1つの出力を持ち、すべて sigmoid(σ(z) = 1 / (1 + e^(-z)))を使います。
- 隠れ層:a_j = σ(inputs · hidden_weights[j] + hidden_biases[j])
- 出力:y = σ(a · output_weights + output_bias)
- 損失:L = (y - target)²
勾配:
- delta_out = 2 × (y - target) × y × (1 - y)
- 出力層:dL/doutput_weights[j] = delta_out × a_j、dL/doutput_bias = delta_out
- delta_j = delta_out × output_weights[j] × a_j × (1 - a_j)
- 隠れ層:dL/dhidden_weights[j][i] = delta_j × inputs[i]、dL/dhidden_biases[j] = delta_j
backprop_gradients(inputs, hidden_weights, hidden_biases, output_weights, output_bias, target) を実装してください。
出力
h + 1 行の行列を返してください。
- 行 j(各隠れニューロン j について順番に):
hidden_weights[j]の n 個の勾配、続いてhidden_biases[j]の勾配。 - 最後の行:
output_weightsの h 個の勾配、続いてoutput_biasの勾配。
制約
1 ≤ n, h ≤ 20
-5 ≤ 各入力、重み、バイアス ≤ 5
0 ≤ target ≤ 1
例
入力:
inputs = [1.0]
hidden_weights = [
[0.0]
]
hidden_biases = [0.0]
output_weights = [0.0]
output_bias = 0.0
target = 1.0
期待される出力:
[
[0.0, 0.0],
[-0.125, -0.25]
]
解説
a = σ(0) = 0.5、y = σ(0) = 0.5。delta_out = 2 × (0.5 - 1) × 0.25 = -0.25。出力の行:[-0.25 × 0.5, -0.25] = [-0.125, -0.25]。delta_1 = -0.25 × 0 × 0.25 = 0 なので、隠れ層の行は [0, 0] です。出力の重みが 0 だと勾配が伝わりません。
入力:
inputs = [1.0, 0.0]
hidden_weights = [
[0.0, 1.0],
[0.0, -1.0]
]
hidden_biases = [0.0, 0.0]
output_weights = [1.0, 1.0]
output_bias = -1.0
target = 0.0
期待される出力:
[
[0.0625, 0.0, 0.0625],
[0.0625, 0.0, 0.0625],
[0.125, 0.125, 0.25]
]
解説
2つの隠れ値はどちらも σ(0) = 0.5 なので、y = σ(0.5 + 0.5 - 1) = 0.5、delta_out = 2 × 0.5 × 0.25 = 0.25。出力の行:[0.125, 0.125, 0.25]。各 delta_j = 0.25 × 1 × 0.25 = 0.0625 となり、隠れ層の行は [0.0625, 0, 0.0625] です(2番目の入力は 0)。
参考資料
-
例 1 未実行入力:
inputs = [1.0] hidden_weights = [ [0.0] ] hidden_biases = [0.0] output_weights = [0.0] output_bias = 0.0 target = 1.0期待される出力:[ [0.0, 0.0], [-0.125, -0.25] ]あなたの出力 -
例 2 未実行入力:
inputs = [1.0, 0.0] hidden_weights = [ [0.0, 1.0], [0.0, -1.0] ] hidden_biases = [0.0, 0.0] output_weights = [1.0, 1.0] output_bias = -1.0 target = 0.0期待される出力:[ [0.0625, 0.0, 0.0625], [0.0625, 0.0, 0.0625], [0.125, 0.125, 0.25] ]あなたの出力
提出時に非公開テスト4件も実行されます。 失敗したテストがあれば、そのテストが表示されます。チャレンジを解くとすべて見られます。
Online Kotlin Compiler
Write, compile, run, and debug Kotlin code online in a full-featured browser IDE. Work with multiple files, save your workspace, and collaborate in real time.
🧩 この Kotlin オンライン実行ツールについて
CodeUtility Kotlin Executor は、ブラウザ上でそのまま Kotlin コードを記述・コンパイル・実行できるツールです - インストールや IDE、SDK の設定は不要です。実際の Kotlin コンパイラを隔離されたサンドボックスで動かしているため、 安全かつ本物の実行体験を提供します。
このツールは複数の Kotlin バージョン - 1.6、1.9、2.1 - に対応しており、構文の更新を試したり、 コードの互換性を検証したり、コルーチン、データクラス、sealed インターフェースといった最新機能を実験できます。
Kotlin の基礎を学ぶ学生、スニペットを試す Android 開発者、 あるいはブラウザを離れずに JVM 環境でロジックを検証したいバックエンドエンジニアに最適です。
各スニペットは安全なコンテナ化ランタイム内で実行され、安定したパフォーマンスと安全なコード実行を実現します。
同じ実行環境で、複数ファイル対応エディター、分離された実行ターミナル、ランタイム別ライブラリ、永続ワークスペース、共有、リアルタイム共同作業を利用できます。
この実行環境の使い方
ランタイムを選択し、ファイルを開くか作成してコードを記述し、[実行]を選択します。出力はターミナルに表示されます。サインインしたユーザーは、ワークスペースにファイルを保存し、ライブラリをインストールして、共有を通じて共同作業できます。
- バージョンを選択して現在のファイルを編集するか、ワークスペース内の別のファイルを開きます。
- コードを実行し、求められた場合はターミナルに入力して、保存された実行履歴を確認します。
- 複数のコードスニペットが必要な作業では、ライブラリ、ワークスペースツール、共有、チャットを利用します。
💡 初心者向け Kotlin 基本ガイド
1. 変数と定数の宣言
Kotlin では、不変には val、可変には var を使います。
val name: String = "Alice"
var age: Int = 30
val pi = 3.14 // 型推論
// 定数
const val MAX_USERS = 100
2. 条件分岐(if / when)
if 式、または複数分岐に when を使います。
val x = 2
if (x == 1) {
println("一")
} else if (x == 2) {
println("二")
} else {
println("その他")
}
when (x) {
1 -> println("一")
2 -> println("二")
else -> println("その他")
}
3. ループ
繰り返しには for、while、do-while を使います。
for (i in 0..2) {
println(i)
}
var n = 3
while (n > 0) {
println(n)
n--
}
4. 配列
Kotlin では arrayOf() で配列を扱えます。
val numbers = arrayOf(10, 20, 30)
println(numbers[1])
5. リスト操作
動的なリストには mutableListOf を使います。
val nums = mutableListOf(1, 2, 3)
nums.add(4)
nums.removeAt(0)
for (n in nums) {
print("$n ")
}
6. コンソール入力/出力
入力は readLine()、出力は println() を使います。
print("名前を入力してください: ")
val name = readLine()
println("こんにちは、$name")
7. 関数
関数は fun キーワードで定義し、戻り値の型は省略可能です。
fun add(a: Int, b: Int): Int {
return a + b
}
println(add(3, 4))
8. マップ
mutableMapOf はキーと値のペアを保持します。
val ages = mutableMapOf("Alice" to 30)
println(ages["Alice"])
9. 例外処理
エラー処理には try、catch、finally を使います。
try {
val result = 10 / 0
} catch (e: ArithmeticException) {
println("エラー: ${e.message}")
}
10. ファイル入出力
ファイル操作には java.io の File を使います。
import java.io.File
File("file.txt").writeText("こんにちは、ファイル")
val text = File("file.txt").readText()
println(text)
11. 文字列操作
Kotlin の文字列は多くのメソッドと文字列補間をサポートしています。
val text = "Hello World"
println(text.length)
println(text.substring(0, 5))
println(text.contains("World"))
12. クラスとオブジェクト
Kotlin のクラスは簡潔で、デフォルトコンストラクタをサポートします。
class Person(val name: String) {
fun greet() = println("こんにちは、私は$nameです")
}
val p = Person("Alice")
p.greet()
13. Null 安全性
Kotlin は null 許容型と非 null 型を区別します。安全のために ? と ?: を使います。
val name: String? = null
println(name?.length ?: 0)