**أصل التدرج** هو خوارزمية تحسين تكرارية من الدرجة الأولى للعثور على الحد الأدنى المحلي لدالة قابلة للاشتقاق. للعثور على الحد الأدنى المحلي للدالة باستخدام منحدر التدرج، نتخذ خطوات تتناسب مع *سلبية* التدرج (أو التدرج التقريبي) للدالة عند النقطة الحالية. ولكن إذا اتخذنا بدلاً من ذلك خطوات تتناسب مع *إيجابية* التدرج، فإننا نقترب من الحد الأقصى المحلي لهذه الدالة؛ يُعرف الإجراء بعد ذلك **بصعود متدرج**. تم اقتراح خوارزمية أصل التدرج من قبل العالم الرياضي أوغستين لوي كوشي في عام 1847.

وصف
---

 رسم توضيحي لأصل التدرج على سلسلة من مجموعات المستويات
يعتمد أصل التدرج على الملاحظة أنه إذا كانت الدالة متعددة المتغيرات {\displaystyle F(\mathbf {x} )} معرفة وقابلة للاشتقاق في جوار النقطة {\displaystyle \mathbf {a} } ، فإن{\displaystyle F(\mathbf {x} )} ينخفض بسرعة أكبرإذا ذهبنا من {\displaystyle \mathbf {a} } في اتجاه التدرج السلبي لـ F في {\displaystyle \mathbf {a} ,-\nabla F(\mathbf {a} )} .

و يتبع ذلك أنه إذا كان

{\displaystyle \mathbf {a} \_{n+1}=\mathbf {a} \_{n}-\gamma \nabla F(\mathbf {a} \_{n})}
فإنه لكل {\displaystyle \gamma \in \mathbb {R} \_{+}} صغيرة بما يكفي، {\displaystyle F(\mathbf {a\_{n}} )\geq F(\mathbf {a\_{n+1}} )}. وبعبارة أخرى، الحد{\displaystyle \gamma \nabla F(\mathbf {a} )} يطرح من {\displaystyle \mathbf {a} } لأننا نريد التحرك ضد التدرج نحو الحد الأدنى المحلي. مع أخذ هذه الملاحظة في الاعتبار، يبدأ المرء باختيار {\displaystyle \mathbf {x} \_{0}} كنقطة بداية F (يمكن اختيارها عشوائيا)، ويعتبر بعد ذلك التسلسل {\displaystyle \mathbf {x} \_{0},\mathbf {x} \_{1},\mathbf {x} \_{2},\ldots } , بحيث:

{\displaystyle \mathbf {x} \_{n+1}=\mathbf {x} \_{n}-\gamma \_{n}\nabla F(\mathbf {x} \_{n}),\ n\geq 0.}
لدينا تسلسل رتيب

{\displaystyle F(\mathbf {x} \_{0})\geq F(\mathbf {x} \_{1})\geq F(\mathbf {x} \_{2})\geq \cdots ,}
لذا نأمل أن يكون التسلسل {\displaystyle (\mathbf {x} \_{n})} يتقارب نحو الحد الأدنى المحلي المطلوب. لاحظ أن قيمة *حجم الخطوة* \gamma  يسمح بالتغيير في كل تكرار. مع بعض الافتراضات على الدالة F (فمثلا، F محدبة و {\displaystyle \nabla F} ليبشيتزية) وخيارات معينة من \gamma  (على سبيل المثال، يتم اختياره إما عن طريق البحث الخطي الذي يلبي شروط وولفه، أو طريقة بارزيلاي - بوروين  الموضحة على النحو التالي):

{\displaystyle \gamma \_{n}={\frac {\left|\left(\mathbf {x} \_{n}-\mathbf {x} \_{n-1}\right)^{T}\left[\nabla F(\mathbf {x} \_{n})-\nabla F(\mathbf {x} \_{n-1})\right]\right|}{\left\|\nabla F(\mathbf {x} \_{n})-\nabla F(\mathbf {x} \_{n-1})\right\|^{2}}}}
يمكن ضمان التقارب إلى الحد الأدنى المحلي.

عندما تكون الدالة F محدبة، كل الحدود الدنيا المحلية هي أيضًا حد أدنى عام، لذلك في هذه الحالة يمكن أن يتقارب أصل التدرج إلى الحل العام.

هذه العملية موضحة في الصورة المجاورة. هنا F من المفترض أن يتم تعريفها على المستوى، وأن الرسم البياني له شكل وعاء. المنحنيات الزرقاء هي الخطوط المنسوبية، أي المناطق التي تكون فيها قيمة F ثابتة. يظهر سهم أحمر ينشأ عند نقطة اتجاه التدرج السلبي في تلك النقطة. لاحظ أن التدرج (السلبي) عند نقطة ما هو متعامد مع خط الكفاف الذي يمر عبر تلك النقطة. نرى أن *أصل* التدرج يقودنا إلى قاع الوعاء، أي إلى النقطة التي تكون فيها قيمة الدالة F هي الحد الأدنى.

### أمثلة

يعاني أصل التدرج من مشاكل في الدوال «المرضية» مثل دالة روزين بروك الموضحة هنا.

{\displaystyle f(x\_{1},x\_{2})=(1-x\_{1})^{2}+100(x\_{2}-{x\_{1}}^{2})^{2}.}
تحتوي دالة روزين بروك على واد منحني ضيق يحتوي على الحد الأدنى. الجزء السفلي من الوادي مسطح للغاية. بسبب الوادي المسطح المنحني يكون التحسين متعرجًا ببطء مع أحجام خطوات صغيرة نحو الحد الأدنى.

يمكننا رؤية مثال آخر على الطبيعة المتعرجة لهذه الطريقة: فلنطبق خوارزمية أصل التدرج على الدالة التالية:

{\displaystyle F(x,y)=\sin \left({\frac {1}{2}}x^{2}-{\frac {1}{4}}y^{2}+3\right)\cos \left(2x+1-e^{y}\right).}
خوارزمية أصل التدرج في العمل. (1: كفاف)خوارزمية أصل التدرج في العمل. (2: السطح)

استعمال أصل التدرج في خوارزميات التعلم الآلي
--------------------------------------------

يعتبر أصل التدرج هو أساس خوارزميات التحسين المستخدمة في ميدان التعلم الآلي
حيث تتكون شبكات التعلم الآلي من عدد من العصبونات الاصطناعية، لكل منها وزن وانحياز   

فشبكة التعلم الآلي تشكل في الحقيقة دالة متعددة المتغيرات، متغيراتها هي الأوزان والانحيازات التي تخضع للتدريب
  

يتلخص تدريب الشبكات العصبية في الخطوات التالية:   

1) حساب دالة «الخسارة»: وهي الدالة الناتجة عن حساب الفرق بين قيم مخارج الشبكة العصبية عندما تطبق على مجموعة التدريب، والنتائج الحقيقية المنتظرة من مجموعة التدريب   

2) حساب المشتقات الجزئية لدالة الخسارة، بالنسبة لمجموعة الأوزان والانحيازات   

3) تطبيق الانتشار الخلفي عبر خوارزمية **أصل التدرج**، وذلك عن طريق طرح المشتقات الجزئية لدالة الخسارة من الأوزان والانحيازات (بعد ضربها بمعامل التعلم)، وإعادة الخطوات 1) و 2) و 3) في طريق التدرج نحو الحد الأدنى لدالة الخسارة

تعليقات
-------

يعمل أصل التدرج في فضاءَات متعددة الأبعاد وحتى في الأبعاد اللانهائية.  

في حالة الأبعاد اللانهائية، تكون مساحة البحث عادةً عبارة عن فضاء دالي، ونحسب مشتقة فريشيه الخاصة بالدالة التي سيتم تصغيرها لتحديد اتجاه الهبوط.

يمكن أن يستغرق أصل التدرج العديد من التكرارات لحساب الحد الأدنى المحلي بالدقة المطلوبة إذا كان انحناء الدالة مختلفا اختلافا كبيرا حسب الاتجاهات. لمثل هذه الدوال، فإن التهيئة المسبقة، التي تغير هندسة المساحة لتشكيل مجموعات مستوى الدالة مثل الدوائر المتحدة المركز، تعالج التقارب البطيء. ومع ذلك، يمكن أن يكون إنشاء وتطبيق الشروط المسبقة مكلفًا من الناحية الحسابية.

يمكن دمج أصل التدرج مع بحث خطي، للعثور على حجم الخطوة الأمثل محليًا \gamma  في كل تكرار. يمكن أن يستغرق إجراء البحث الخطي وقتًا طويلاً.

على العكس من ذلك، باستخدام ثابتة صغيرة \gamma  يمكن أن يسفر عن تقارب ضعيف.

يمكن أن تكون الطرق المستندة إلى طريقة نيوتن وانقلاب الهسيان باستخدام تقنيات التدرج المترافق بدائل أفضل. بشكل عام، تتقارب هذه الأساليب في عدد أقل من التكرارات، ولكن تكلفة كل تكرار أعلى. ومن الأمثلة على ذلك طريقة BFGS التي تتكون من حساب مصفوفة في كل خطوة يتم من خلالها ضرب متجهة التدرج للذهاب إلى اتجاه «أفضل»، مقترنًا بخوارزمية بحث خطي أكثر تعقيدًا، للعثور على القيمة «الأفضل» لـ {\displaystyle \gamma .}

بالنسبة للمسائل الكبيرة للغاية، حيث تهيمن مشاكل ذاكرة الكمبيوتر، يجب استخدام طريقة محدودة الذاكرة مثل L-BFGS بدلاً من BFGS أو أصل التدرج.

يمكن النظر إلى أصل التدرج على أنه تطبيق طريقة أويلر لحل المعادلات التفاضلية العادية {\displaystyle x'(t)=-\nabla f(x(t))} لتدفق متدرج.

أمثلة حسابية
------------

تطبق أمثلة التعليمات البرمجية التالية خوارزمية أصل التدرج للعثور على الحد الأدنى للدالة {\displaystyle f(x)=x^{4}-3x^{3}+2,} مع مشتقة:{\displaystyle f'(x)=4x^{3}-9x^{2}.}

حل ل {\displaystyle 4x^{3}-9x^{2}=0} وتقييم المشتق الثاني عند الحلول يبين أن الدالة لها نقطة هضبة عند 0 والحد الأدنى العام عند {\displaystyle x={\tfrac {9}{4}}.}

### بيثون

فيما يلي تطبيق بلغة برمجة Python : 

```
next\_x = 6 # We start the search at x=6
gamma = 0.01 # Step size multiplier
precision = 0.00001 # Desired precision of result
max\_iters = 10000 # Maximum number of iterations

# Derivative function
def df(x):
  return 4 \* x \*\* 3 - 9 \* x \*\* 2

for \_ in range(max\_iters):
  current\_x = next\_x
  next\_x = current\_x - gamma \* df(current\_x)

  step = next\_x - current\_x
  if abs(step) <= precision:
    break

print("Minimum at ", next\_x)

# The output for the above will be something like
# "Minimum at 2.2499646074278457"

```

### سكالا

هنا تنفيذ في لغة برمجة سكالا 

```
import math.\_
 
val curX = 6
val gamma = 0.01
val precision = 0.00001
val previousStepSize = 1 / precision

def df(x: Double): Double = 4 \* pow(x, 3) - 9 \* pow(x, 2)

def gradientDescent(precision: Double, previousStepSize: Double, curX: Double): Double = {
 if (previousStepSize > precision) {
 val newX = curX + -gamma \* df(curX) 
 println(curX)
 gradientDescent(precision, abs(newX - curX), newX)
 } else curX 
}

val ans = gradientDescent(precision, previousStepSize, curX)
println(s"The local minimum occurs at $ans")

```

### جافا

```
import java.util.function.Function;
import static java.lang.Math.pow;
import static java.lang.Math.abs

double gamma = 0.01;
double precision = 0.00001;

Function<Double,Double> df = x -> 4 \* pow(x, 3) - 9 \* pow(x, 2);

double gradientDescent(Function<Double,Double> f) {

 double curX = 6.0;
 double previousStepSize = 1.0;

 while (previousStepSize > precision) {
 double prevX = curX;
 curX -= gamma \* f.apply(prevX);
 previousStepSize = abs(curX - prevX);
 }
 return curX;
}

double res = gradientDescent(df);
System.out.println(String.format("The local minimum occurs at %f", res));

```

مراجع
-----

1. ↑  Lemaréchal، C. (2012). "Cauchy and the Gradient Method" (PDF). *Doc Math Extra*: 251–254. مؤرشف من الأصل (PDF) في 2018-12-29.
2. ↑  Barzilai، Jonathan؛ Borwein، Jonathan M. (1988). "Two-Point Step Size Gradient Methods". *IMA Journal of Numerical Analysis*. ج. 8 ع. 1: 141–148. DOI:10.1093/imanum/8.1.141.
3. ↑  Fletcher، R. (2005). "On the Barzilai–Borwein Method". في Qi؛ Teo، K.؛ Yang، X. (المحررون). *Optimization and Control with Applications*. Applied Optimization. Boston: Springer. ج. 96. ص. 235–256. ISBN:0-387-24254-6.
4. ↑  "Gradient Descent" (بالإنجليزية). Archived from the original on 2020-05-01. Retrieved 2020-05-01.
5. ↑  Akilov، G. P.؛ Kantorovich، L. V. (1982). *Functional Analysis* (ط. 2nd). Pergamon Press. ISBN:0-08-023036-9.
6. ↑  Press، W. H.؛ Teukolsky، S. A.؛ Vetterling، W. T.؛ Flannery، B. P. (1992). *Numerical Recipes in C: The Art of Scientific Computing* (ط. 2nd). New York: Cambridge University Press. ISBN:0-521-43108-5. مؤرشف من الأصل في 2020-04-30.
7. ↑  Strutz، T. (2016). *Data Fitting and Uncertainty: A Practical Introduction to Weighted Least Squares and Beyond* (ط. 2nd). Springer Vieweg. ISBN:978-3-658-11455-8.

|  |
| --- |
| **خوارزمية أصل التدرج** في المشاريع الشقيقة: |
|  | 
* صور وملفات صوتية من كومنز.
 |


| * ع
* ن
* ت
استمثال: خوارزميات، طريقة، تجريبية |
| --- |
| 

| برمجة غير خطية |
| --- |
| 

|  |  |
| --- | --- |
| دالة | 
* Golden-section search
* Interpolation methods  ‏
* Line search
* Nelder–Mead method
* Successive parabolic interpolation

 |
| تدرج | 

|  |  |
| --- | --- |
| Convergence | 
* Trust region
* Wolfe conditions

 |
| Quasi–Newton | 
* Berndt–Hall–Hall–Hausman
* Broyden–Fletcher–Goldfarb–Shanno and L-BFGS
* Davidon–Fletcher–Powell
* Symmetric rank-one (SR1)  ‏

 |
| طريقة تكرارية | 
* خوارزمية جاوس ونيوتن
* خوارزمية أصل التدرج
* Levenberg–Marquardt
* Conjugate gradient  ‏
* Truncated Newton  ‏

 |

 |
| مصفوفة هيسية | 
* Newton's method

 |

 |

 | Graph of a strictly concave quadratic function with unique maximum.Optimization computes maxima and minima. |
| 

| برمجة |
| --- |
| 

|  |  |
| --- | --- |
| عامة | 
* Barrier methods  ‏
* الدلة الجزائية  ‏s

 |
| تفاضلية | 
* Augmented Lagrangian methods
* Sequential quadratic programming
* Successive linear programming

 |

 |

 |
| 

| استمثال محدب |
| --- |
| 

|  |  |
| --- | --- |
| استمثال محدب | 
* Cutting-plane method
* Reduced gradient (Frank–Wolfe)  ‏
* Subgradient method

 |
| برمجة خطية andquadratic | 

|  |  |
| --- | --- |
| Interior point | 
* Affine scaling
* Ellipsoid algorithm of Khachiyan  ‏
* خوارزمية كارماركر

 |
| ماترويدخوارزمية جشعة | 
* طريقة التبسيط
* Revised simplex algorithm  ‏
* Criss-cross algorithm
* Principal pivoting algorithm of Lemke  ‏

 |

 |

 |

 |
| 

| استمثال توافقي |
| --- |
| 

|  |  |
| --- | --- |
| Paradigms | 
* خوارزمية التقريب  ‏
* برمجة ديناميكية
* خوارزمية جشعة
* برمجة الأعداد الصحيحة
	+ التفريغ والتحديد/cut

 |
| قائمة الخوارزميات | 

|  |  |
| --- | --- |
| [[Minimum spanning tree|Minimum spanning tree]]  ‏ | 
* خوارزمية بلمان فورد
* Borůvka
* خوارزمية ديكسترا
* خوارزمية فلويد-مارشل
* Johnson
* خوارزمية كروسكال

 |

 |
| Network flows  ‏ | 
* Dinic
* Edmonds–Karp
* Ford–Fulkerson
* Push–relabel maximum flow  ‏

 |

 |

 |
| 

| الأدلة العليا |
| --- |
| 
* خوارزمية تطورية
* Hill climbing
* البحث المحلي
* تخمير محاكى
* Tabu search

 |

 |
| 
* Software

 |

* أيقونة بوابةبوابة تحليل رياضي
* أيقونة بوابةبوابة رياضيات