public class SGD<Model: Differentiable>: Optimizer
where
Model.TangentVector: VectorProtocol & ElementaryFunctions & KeyPathIterable,
Model.TangentVector.VectorSpaceScalar == Float
เครื่องมือเพิ่มประสิทธิภาพการไล่ระดับสีสุ่ม (SGD)
ใช้อัลกอริธึมการไล่ระดับสีแบบสุ่มโดยรองรับโมเมนตัม การสลายตัวของอัตราการเรียนรู้ และโมเมนตัม Nesterov โมเมนตัมและโมเมนตัม Nesterov (หรือที่รู้จักในชื่อวิธีการไล่ระดับความเร่งของ Nesterov) เป็นวิธีการปรับให้เหมาะสมลำดับแรกที่สามารถปรับปรุงความเร็วการฝึกและอัตราการบรรจบกันของการไล่ระดับลง
อ้างอิง:
- “วิธีการประมาณค่าสุ่ม” (Robbins and Monro, 1951)
- “เกี่ยวกับวิธีการประมาณค่าสุ่มของร็อบบินส์และมอนโร” (Wolfowitz, 1952)
- “การประมาณค่าสุ่มสูงสุดของฟังก์ชันการถดถอย” (Kiefer และ Wolfowitz, 1952)
- “วิธีการบางอย่างในการเร่งการบรรจบกันของวิธีการวนซ้ำ” (Polyak, 1964)
- “วิธีการสำหรับปัญหาการลดขนาดนูนที่ไม่มีข้อจำกัดด้วยอัตราการลู่เข้า” (Nesterov, 1983)
คำประกาศ
public typealias Model = Model
อัตราการเรียนรู้
คำประกาศ
public var learningRate: Float
ปัจจัยโมเมนตัม โดยจะเร่งการไล่ระดับสีแบบสุ่มในทิศทางที่เกี่ยวข้องและลดความผันผวน
คำประกาศ
public var momentum: Float
อัตราการเรียนรู้ลดลง
คำประกาศ
public var decay: Float
ใช้โมเมนตัม Nesterov หากเป็นจริง
คำประกาศ
public var nesterov: Bool
สถานะความเร็วของแบบจำลอง
คำประกาศ
public var velocity: Model.TangentVector
ชุดขั้นตอนที่ดำเนินการ
คำประกาศ
public var step: Int
สร้างอินสแตนซ์สำหรับ
model
คำประกาศ
public init( for model: __shared Model, learningRate: Float = 0.01, momentum: Float = 0, decay: Float = 0, nesterov: Bool = false )
พารามิเตอร์
learningRate
อัตราการเรียนรู้ ค่าเริ่มต้นคือ
0.01
momentum
ปัจจัยโมเมนตัมที่เร่งการไล่ระดับสีสุ่มในทิศทางที่เกี่ยวข้องและลดความผันผวน ค่าเริ่มต้นคือ
0
decay
อัตราการเรียนรู้ลดลง ค่าเริ่มต้นคือ
0
nesterov
ใช้โมเมนตัม Nesterov iff
true
ค่าเริ่มต้นเป็นtrue
คำประกาศ
public required init(copying other: SGD, to device: Device)