**گرادیان محو شونده** مشکلی است که در یادگیری ماشینی، هنگام آموزش بعضی شبکه‌های عصبی مصنوعی (و به خصوص شبکه‌های عصبی عمیق) ممکن است رخ دهد و باعث توقف یادگیری مدل می‌شود. در روش پس‌انتشار، در طول هر تکرار تمرین، وزن‌های شبکه عصبی متناسب با مشتق تابع خطا با توجه به وزن فعلی آن‌ها، تغییر پیدا می‌کند. در برخی موارد، این مقدار مشتق به‌طور قابل توجهی کوچک می‌شود و از تغییر مقدار وزن‌های شبکه عصبی جلوگیری می‌کند و روند آموزش آن را دچار مشکل می‌کند. در بدترین حالت، این اتفاق ممکن است به‌طور کامل مانع آموزش شبکه عصبی بشود. به عنوان مثال، برخی از توابع فعال‌سازی دارای مشتق‌هایی در محدوده بین صفر و یک هستند، از آنجایی که روش پس‌انتشار، گرادیان‌ها را با قانون زنجیره‌ای محاسبه می‌کند، در اثر ضرب n عدد از این اعداد کوچک برای محاسبه گرادیان لایه‌های اولیه در یک شبکه n لایه، گرادیان مقدار خیلی کوچکی پیدا می‌کند.

به‌طور تاریخی، روش پس انتشار برای آموزش شبکه‌های مصنوعی عمیق در یادگیری ماشینی تحت نظارت، کاربرد کمی داشته. سپ هوکرایتر علت چنین اتفاقی را همین مشکل گرادیان محو شونده معرفی کرد که در شبکه‌های عصبی عمیق، و شبکه‌های عصبی بازگشتی به وجود می‌آید. پیدا کردن راه‌حل‌هایی برای این مشکل سبب رشد چشم‌گیر استفاده شبکه‌های مصنوعی عمیق شد.

مشکل مشابه محوشدن گرادیان هنگامی که از توابع فعال‌سازی استفاده می‌شود که مشتق آن‌ها مقادیر بزرگی می‌گیرند، ممکن است رخ بدهد. در گرادیان انفجاری، با محاسبه مشتق‌های جزئی، مقادیر گرادیان نسبت به وزن‌های اصلی خیلی بزرگ‌تر می‌شوند و روند آموزش مدل با مشکل مواجه می‌شود.

مدل ریاضی
---------

### مدل شبکه بازگشتی

شبکه عصبی بازگشتی که به‌طور گسترده در پردازش زبان‌های طبیعی به کار می‌روند، با چنین مشکلی روبه رو می‌شوند. اگر یک شبکه عصبی بازگشتی را به صورت زیر فرمول‌بندی کنیم:



(

h

t

,

x

t

)
=
F
(

h

t
−
1

,

u

t

,
θ
)

{\displaystyle (h\_{t},x\_{t})=F(h\_{t-1},u\_{t},\theta )}

{\displaystyle (h_{t},x_{t})=F(h_{t-1},u_{t},\theta )}از آنجایی که {\displaystyle x\_{t}} تابعی از {\displaystyle h\_{t}} است:



x

t

=
F
(

x

t
−
1

,

u

t

,
θ
)

{\displaystyle x\_{t}=F(x\_{t-1},u\_{t},\theta )}

{\displaystyle x_{t}=F(x_{t-1},u_{t},\theta )}معادله زیر را در نظر بگیرید:



d

x

t


=

∇

θ

F
(

x

t
−
1

,

u

t

,
θ
)
d
θ
+

∇

x

F
(

x

t
−
1

,

u

t

,
θ
)
d

x

t
−
1



=

∇

θ

F
(

x

t
−
1

,

u

t

,
θ
)
d
θ
+

∇

x

F
(

x

t
−
1

,

u

t

,
θ
)
(

∇

θ

F
(

x

t
−
2

,

u

t
−
1

,
θ
)
d
θ
+

∇

x

F
(

x

t
−
2

,

u

t
−
1

,
θ
)
d

x

t
−
2

)



=
⋯



=

(

∇

θ

F
(

x

t
−
1

,

u

t

,
θ
)
+

∇

x

F
(

x

t
−
1

,

u

t

,
θ
)

∇

θ

F
(

x

t
−
2

,

u

t
−
1

,
θ
)
+
⋯

)

d
θ



{\displaystyle {\begin{aligned}dx\_{t}&=\nabla \_{\theta }F(x\_{t-1},u\_{t},\theta )d\theta +\nabla \_{x}F(x\_{t-1},u\_{t},\theta )dx\_{t-1}\\&=\nabla \_{\theta }F(x\_{t-1},u\_{t},\theta )d\theta +\nabla \_{x}F(x\_{t-1},u\_{t},\theta )(\nabla \_{\theta }F(x\_{t-2},u\_{t-1},\theta )d\theta +\nabla \_{x}F(x\_{t-2},u\_{t-1},\theta )dx\_{t-2})\\&=\cdots \\&=\left(\nabla \_{\theta }F(x\_{t-1},u\_{t},\theta )+\nabla \_{x}F(x\_{t-1},u\_{t},\theta )\nabla \_{\theta }F(x\_{t-2},u\_{t-1},\theta )+\cdots \right)d\theta \end{aligned}}}

{\displaystyle {\begin{aligned}dx_{t}&=\nabla _{\theta }F(x_{t-1},u_{t},\theta )d\theta +\nabla _{x}F(x_{t-1},u_{t},\theta )dx_{t-1}\\&=\nabla _{\theta }F(x_{t-1},u_{t},\theta )d\theta +\nabla _{x}F(x_{t-1},u_{t},\theta )(\nabla _{\theta }F(x_{t-2},u_{t-1},\theta )d\theta +\nabla _{x}F(x_{t-2},u_{t-1},\theta )dx_{t-2})\\&=\cdots \\&=\left(\nabla _{\theta }F(x_{t-1},u_{t},\theta )+\nabla _{x}F(x_{t-1},u_{t},\theta )\nabla _{\theta }F(x_{t-2},u_{t-1},\theta )+\cdots \right)d\theta \end{aligned}}}مشتق جزئی را برای لایه‌های شبکه محاسبه می‌کنیم ({\displaystyle \eta } نرخ یادگیری است).

|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| {\displaystyle dL=\nabla \_{x}L(x\_{T},u\_{1},...u\_{T})\left(\nabla \_{\theta }F(x\_{t-1},u\_{t},\theta )+\nabla \_{x}F(x\_{t-1},u\_{t},\theta )\nabla \_{\theta }F(x\_{t-2},u\_{t-1},\theta )+\cdots \right)d\theta } | 

|  |  |  |
| --- | --- | --- |
|   |   |   |
|   |

 | **(مشتق جزئی)** |


Δ
θ
=
−
η
⋅

[

∇

x

L
(

x

T

)

(

∇

θ

F
(

x

t
−
1

,

u

t

,
θ
)
+

∇

x

F
(

x

t
−
1

,

u

t

,
θ
)

∇

θ

F
(

x

t
−
2

,

u

t
−
1

,
θ
)
+
⋯

)

]

T

{\displaystyle \Delta \theta =-\eta \cdot \left[\nabla \_{x}L(x\_{T})\left(\nabla \_{\theta }F(x\_{t-1},u\_{t},\theta )+\nabla \_{x}F(x\_{t-1},u\_{t},\theta )\nabla \_{\theta }F(x\_{t-2},u\_{t-1},\theta )+\cdots \right)\right]^{T}}

{\displaystyle \Delta \theta =-\eta \cdot \left[\nabla _{x}L(x_{T})\left(\nabla _{\theta }F(x_{t-1},u_{t},\theta )+\nabla _{x}F(x_{t-1},u_{t},\theta )\nabla _{\theta }F(x_{t-2},u_{t-1},\theta )+\cdots \right)\right]^{T}}همان‌طور که می‌بینیم مشتق در هر لایه حاصل از تعدادی ضرب است. در در صورتی که عامل‌های حاصل ضرب کوچک‌تر از ۱ (به‌طور کلی‌تر با قدر مطلق کوچک‌تر از ۱) باشند. حاصل نهایی به شکل نامطلوبی کوچک می‌شود.



∇

x

F
(

x

t
−
1

,

u

t

,
θ
)

∇

x

F
(

x

t
−
2

,

u

t
−
1

,
θ
)

∇

x

F
(

x

t
−
3

,

u

t
−
2

,
θ
)
⋯

{\displaystyle \nabla \_{x}F(x\_{t-1},u\_{t},\theta )\nabla \_{x}F(x\_{t-2},u\_{t-1},\theta )\nabla \_{x}F(x\_{t-3},u\_{t-2},\theta )\cdots }

{\displaystyle \nabla _{x}F(x_{t-1},u_{t},\theta )\nabla _{x}F(x_{t-2},u_{t-1},\theta )\nabla _{x}F(x_{t-3},u_{t-2},\theta )\cdots }

راه‌حل‌ها
---------

برای حل مشکل گرادیان محوشونده، راه‌حل‌های زیر وجود دارند.

### نرمال سازی دسته‌ای

روشی استاندارد برای حل مشکل گرادیان محوشونده و گرادیان انفجاری انجام نرمال‌سازی دسته‌ای است. در این روش بین هر دو لایه در شبکه عصبی یک لایه میانی قرار می‌گیرد و مقادیر عددی که از یک لایه به لایه بعد می‌روند را نرمال می‌کند. به این معنی که میانگین آن‌ها را برابر ۰ و واریانس آن‌ها را برابر ۱ می‌کند. در نهایت یک ترکیب خطی روی آن‌ها اعمال می‌کند تا در بازه مشخصی از اعداد قرار بگیرند. انجام این کار باعث می‌شود مقدار عددی گرادیان کنترل بشود و مشکل گرادیان محو شونده تا حد خوبی رفع بشود.

### برش گرادیان

یک روش مؤثر دیگر برش گرادیان است. در این روش یک مقدار بیشینه و یک مقدار کمینه به‌ترتیب برای حل مشکل گرادیان انفجاری و گرادیان محو شونده مشخص می‌شود. سپس مقادیر گرادیانی که در خارج از این بازه باشند، به صورت مصنوعی به مقدار کمینه یا بیشینه تغییر داده می‌شوند. همچنین می‌توان نرم بردار گرادیان را در چنین بازه‌ای قرار داد. چرا که با کنترل نرم اندازه نسبی گرادیان‌ها در مقادیر جدید حفظ می‌شود.

### شبکه‌های باقی مانده

استفاده از شبکه‌های عصبی باقی‌مانده (ResNet) نیز می‌تواند برای حل مشکل گرادیان محو شونده به کار برود. در این شبکه‌ها مسیرهایی وجود دارد که از یک لایه به لایه غیر مجاور آن می‌رود. این ویژگی باعث می‌شود مسیرهایی با طول کمتر وجود داشته باشد که احتمال رخ دادن گرادیان محو شونده را کم می‌کند.

### مقدار اولیه وزن

انجام درست مقداردهی اولیه وزن‌ها می‌تواند برای کاهش مشکل گرادیان محو شونده در شبکه‌های عمیق به‌کار برود. برای مثال در یک مطالعه استفاده از توزیع‌های متفاوت، با توجه به توابع فعال‌سازی که در شبکه به‌کار رفته‌اند توصیه شده‌است. برای مثال برای تابع فعال‌سازی لجستیک استفاده از توزیع گوسی با میانگین و انحراف معیاری مشخص به نتایج بهتری منجر می‌شود.

### روش‌های دیگر

استفاده از روش‌های دیگر آموزش مدل‌های شبکه‌های عصبی به طوری که مبتنی بر پس انتشار و کاهش گرادیان نباشند، باعث می‌شود اصلاً نیازی به حل مسئله نباشد، چرا که مشکل گرادیان محو شونده در این شرایط به وجود می‌آید.[]

منابع
-----

1. 1 2 3  Basodi, Sunitha; Ji, Chunyan; Zhang, Haiping; Pan, Yi (September 2020). "Gradient amplification: An efficient way to train deep neural networks". *Big Data Mining and Analytics*. **3** (3): 198. doi:10.26599/BDMA.2020.9020004. ISSN 2096-0654.
2. ↑  Hochreiter, S. (1991). *Untersuchungen zu dynamischen neuronalen Netzen* (PDF) (Diplom thesis). Institut f. Informatik, Technische Univ. Munich.
3. ↑  Hochreiter, S.; Bengio, Y.; Frasconi, P.; Schmidhuber, J. (2001). "Gradient flow in recurrent nets: the difficulty of learning long-term dependencies". In Kremer, S. C.; Kolen, J. F. (eds.). *A Field Guide to Dynamical Recurrent Neural Networks*. IEEE Press. ISBN 0-7803-5369-2.
4. ↑  Goh, Garrett B.; Hodas, Nathan O.; Vishnu, Abhinav (2017-06-15). "Deep learning for computational chemistry". *Journal of Computational Chemistry* (به انگلیسی). **38** (16): 1291–1307. arXiv:1701.04503. Bibcode:2017arXiv170104503G. doi:10.1002/jcc.24764. PMID 28272810. S2CID 6831636.
5. ↑  Pascanu, Razvan; Mikolov, Tomas; Bengio, Yoshua (2012-11-21). "On the difficulty of training Recurrent Neural Networks". arXiv:1211.5063 [cs.LG].
6. ↑  Ioffe, Sergey; Szegedy, Christian (2015-06-01). "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift". *International Conference on Machine Learning* (به انگلیسی). PMLR: 448–456. arXiv:1502.03167.
7. ↑  Santurkar, Shibani; Tsipras, Dimitris; Ilyas, Andrew; Madry, Aleksander (2018). "How Does Batch Normalization Help Optimization?". *Advances in Neural Information Processing Systems*. Curran Associates, Inc. **31**.
8. ↑  Pascanu, Razvan; Mikolov, Tomas; Bengio, Yoshua (2012-11-21). "On the difficulty of training Recurrent Neural Networks". arXiv:1211.5063 [cs.LG].
9. ↑  He, Kaiming; Zhang, Xiangyu; Ren, Shaoqing; Sun, Jian (2016). *Deep Residual Learning for Image Recognition*. *2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)*. Las Vegas, NV, USA: IEEE. pp. 770–778. arXiv:1512.03385. doi:10.1109/CVPR.2016.90. ISBN 978-1-4673-8851-1.