רשת קונבולוציה
רשת קונבולוציה (באנגלית: CNN – Convolutional Neural Network) היא סוג של רשת נוירונים המשמשת בעיקר לניתוח תמונה[1].
שם נוסף המתאים לה הוא רשת עצבית מלאכותית בחלל (SIANN – Space Invariant Artificial Neural Network)[דרוש מקור].
הרשת מבוססת על שכבות כינוס (באנגלית: convolution layers) הממומשות על ידיי העברת מסננת (filter) או ליבה (kernel) על גביי הקלט וביצוע כפל מטריצות, הפלט נקרא feature map[2][3].
לרשתות קונבולוציה יש שימושים רבים בתחום הראייה ממוחשבת, מערכות המלצה[4], עיבוד שפה טבעית[5], ממשק מוח-מחשב[6] ותחומים רבים נוספים.
ארכיטקטורה
רשת קונבולוציה עושה שימוש בדרך כלל בשכבות fully connected, כינוס (convolution) ו-pooling ( אגרגציה) ובפונקציית הפעלה מסוג ReLU כאשר בדרך כלל (לא מחייב) שכבת הכניסה תהיה שכבת כינוס עם מספר שכבות כינוס, pooling ( אגרגציה ) ו-ReLU נוספות אחריה, ולאחר מכן מספר שכבות fully connected.
שכבת כינוס
קלט לשכבה זאת הוא טנזור בגודל ( מספר קלטים ) x ( מספר ערוצי קלט ) x ( גובה הקלט ) x ( רוחב הקלט ). לאחר שהקלט מסיים לעבור בשכבה מתקבל טנזור המייצג תמונה מופשטת יותר הנקרא feature map בגודל (מספר קלטים) x ( מספר ערוצי ה-feature map ) x ( גובה ה-feature map ) x ( רוחב ה-feature map ).
שכבת כינוס מקבלת טנזור ומוציאה טנזור חדש שישמש כקלט עבור השכבת כינוס הבאה ממש כמו שכבות fully connected ברשת עצבית מלאכותית אחד מיתרונות שכבות הכינוס הוא הוזלת עלות החישוב של תמונות וכתוצאה מכך אפשור העמקת הרשת[7].
לדוגמה, שכבה fully connected לתמונה בגודל 100x100 תיצור לנו כ-10,000 משקולות חדשות עבור כל נוירון בשכבה הבאה דבר שיכול מהר מאוד להפוך ל"יקר" מאוד. לעומת זאת שכבת כינוס עם ליבה בגודל 5x5 תיצור לנו רק כ-25 משתנים למידים חדשים. שימוש במשקולות שעברו נרמול על פחות משתנים עוזר להימנע מבעיית הגרדיאנט הנעלם.
שכבת אגרגציה
שכבה זאת נועדה על מנת לצמצם את גודל הטנזור היא מקבלת טנזור בגודל מסוים בתור קלט ומחזירה טנזור קטן יותר בתור פלט. יש כמה סוגיי שכבות אגרגציה כגון max pooling, average pooling ו-min pooling כאשר max ו-average הם הפופולריים ביותר. סיבת השימוש באגרגציה היא בעיקר על מנת להוריד את "עלות" החישוב ולחסוך בזמן עיבוד[8].
שכבת fully connected
מכילה מערך נוירונים מקבלת כקלט מערך נוירונים ומחברת בין כל נוירון במערך זה לכל נוירון הנמצא בתוכה.(לפירוט נוסף ראה ערך רשת עצבית מלאכותית )
היסטוריה
רשת קונבולוציה הומצאה על ידיי המדען קוניהיקו פוקושימה שהמציא מודל בשם ניוקוגניטרון[9][10][11] רשת עצבית מלאכותית דיי בסיסית בשנת 1980. בשנת 1988 יאן לקון חוקר ממעבדות נוקיה בל שידרג את המודל למצב שבו ידע לזהות ספרות בכתב יד ונעשה בו שימוש בבנקים ומערכות דואר אך לא יותר מכך מכיוון שבזמן זה היה מחסור במאגריי מידע גדולים ומפותחים דבר הכרחי על מנת לאמן בינה מלאכותית מסוג זה, בעיה נוספת הייתה החומרה שאז בזמנו לא הייתה מספיק חזקה על מנת לאמן בינה מלאכותית מסוג זה.
בשנת 2012 חלה תפנית כאשר AlexNet הראתה שאולי הגיע הזמן לחזור לרשתות קונבולוציה עם הטכנולוגיה ודאטה של ימיינו שהתפתחו הרבה מאוד.
אבניי בניין
רשת קונבולוציה מורכבת ממספר שכבות כגוון שכבת כינוס, שכבת אגרגציה ושכבה fully connected.
יכול להיות שימוש בעוד הרבה סוגי שכבות אבל אלה הנפוצות והבסיסיות ביותר.
שכבת כינוס
עוברים על הטנזור ומכפילים עם הליבה (באנגלית: kernel) שהיא טנזור בגודל עם קפיצות בגודל כאשר מייצג את גודל הקפיצה בציר ה- ו מייצג את גודל הקפיצה בציר ה- (בדרך כלל ו-יהיו באותו גודל ולכן פשוט יקראו כנ"ל לגביי ), כאשר כל ליבה יכולה לשמש לצורך מטרה שונה.
או פשוט .
כאשר מייצג את התמונה החדשה, מייצג את התמונה המקורית ו- מייצג את הליבה.
גודל הפלט של שכבת כינוס עם חלון בגודל וקפיצות (strides) בגודל טנזור קלט בגודל
כאשר הם ממדיי הפלט.
שכבת אגרגציה (pooling)
עוברים עם חלון בגודל ועושים פעולה מתמטית המוציאה מספר אחד. למשל, במקרה של max pooling ניקח את המספר הגדול ביותר שיצא בגבולות החלון שלנו בכל החלקה. במקרה של average pooling ניקח את כל המספרים שיצאו בגבולות החלון שלנו ונעשה להם ממוצע[12].
ביצוע max pooling עם חלון בגודל וקפיצות (strides) בגודל טנזור קלט בגודל
כאשר הם ממדיי הפלט ו- .
גודל הפלט של שכבת אגרגציה עם חלון בגודל וקפיצות (strides) בגודל טנזור קלט בגודל
כאשר הם ממדיי הפלט.
שכבת ReLU (Rectified linear unit)
זוהי פונקציית אקטיבציה מאוד פופולרית בקרב רשתות קונבולוציה. הפונקציה עוברת על כל נוירון ומבצעת בו פונקציית יחידה ליניארית מתוקנת.
הפונקציה עבור כל נוירון היא:
שכבת dropout
נועדה למנוע התאמת יתר (overfitting)[13][14], תופעה שבה המודל מתאים את עצמו לסוג הנתונים הספציפי שבעזרתו הוא אומן, ולא יודע להכליל אוסף נתונים רחב יותר (למשל, להבדיל בין תמונות של חתולים לתמונות של כלבים). אם יתרחש overfitting המודל יוכל לסווג את כל תמונות החתולים שאימנו אותו עליהם בצורה טובה אך ברגע שניתן לו תמונות של חתולים שהוא לא מכיר הוא יתחיל לטעות בסיווג.
השכבה פועלת בצורה כזו: היא מקבלת את וקלט של שכבת נוירונים, והיא תתעלם מנוירונים אקראיים, כלומר, לכל נוירון יש סיכוי להישמר או סיכויים להישמט.
משתנים כלליים
גודל הליבה (kernel)
הליבה היא טנזור, וצריך לבחור את ממדי הטנזור. בדרך כלל הגדלים יהיו או או אבל אפשר לבחור כל גודל רצוי כל עוד הוא גדול מאפס.
ריפוד
ריפוד (באנגלית: padding) נועד על מנת לפתור שתי בעיות:
- במהלך ביצוע כינוס נוצרת בעיה. הבעיה נובעת מכך שלמעשה עוברים פחות פעמים על קצוות התמונה וכתוצאה מכך מאבדים מידע יקר ערך. אמנם זה יכול להראות שולי אבל לאחר שימוש בהרבה שכבות כינוס במודל, זה מצטבר להרבה.
- לאחר כל שימוש בכינוס התמונה תקטן ולמעשה אם נשתמש בכמה שכבות כינוס נוכל באיזשהו שלב להגיע למצב שבו צמצמנו את התמונה עד כדי מחיקתה.
תהליך הריפוד בעצם "מרפד" את התמונה באפסים מצדדיה ובכך פותר את שתי הבעיות: כעת אנו עוברים גם על הקצוות כמו שצריך וגם לאחר כינוס התמונה תישאר באותו הגודל (בהנחה שהוספנו את הריפוד בגודל המתאים).
למשל, לתמונה בגודל של עם ליבה בגודל וקפיצות בגודל של אחד, אם נוסיף שכבת ריפוד אחת מכל כיוון לאחר כינוס נשאר עם תמונה בגודל כלומר לא הקטנו אותה.
מפני שריפדנו באפסים אין לחשוש להטיית/עיוות התוצאות כתוצאה מהריפוד[15].
גודל פסיעה (Stride)
משתנה זה מייצג את גודל הפסיעה/קפיצה שנעשית בכל פעם עם הליבה. בדרך כלל יהיה בגודל או אבל יכול להיות בכל גודל רצוי כל עוד הוא גדול מאפס.
מספר הליבות
שכבת כינוס יכולה להכיל מספר ליבות כדי להגדיל את יכולת הזיהוי שלה. בדרך כלל בשכבות הראשונות כשטנזור הקלט עדיין גדול נשתמש במעט ליבות וככל שנתקדם ונגיע לשכבות מאוחרות יותר שבהן הטנזור קטן יותר, נשתמש ביותר ליבות. כל זה כדי להוריד זמני ריצה.
גודל אגרגציה
אגרגציה היא הרי טנזור העובר על תמונת הקלט וצריך לבחור את ממדיי הטנזור. בדרך כלל הגדלים יהיו או אבל אפשרי לבחור כל גודל רצוי כל עוד הוא גדול מאפס.
סוג אגרגציה
ישנם כמה סוגי אגרגציה:
- אגרגציה מקסימלית (max pooling)
- אגרגציה מינימלית (min pooling)
- אגרגציה ממוצעת (average pooling)
קוד
מודל רשת קונבולוציה ב-TensorFlow:
def build_classifier():
model = Sequential(name="classifier")
model.add(Conv2D(64, kernel_size=5, strides=2, input_shape=img_shape, padding='same'))
model.add(LeakyReLU(alpha=0.2))
model.add(Dropout(0.3))
model.add(Conv2D(128, kernel_size=5, strides=2, padding='same'))
model.add(LeakyReLU(alpha=0.2))
model.add(Dropout(0.3))
model.add(Conv2D(256, kernel_size=5, strides=2, padding='same'))
model.add(LeakyReLU(alpha=0.2))
model.add(Dropout(0.3))
model.add(Conv2D(512, kernel_size=5, strides=2, padding='same'))
model.add(LeakyReLU(alpha=0.2))
model.add(Dropout(0.3))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.summary()
image = Input(shape=img_shape)
validity = model(image)
return Model(image, validity)
הערות שוליים
- ^ M. V. Valueva, N. N. Nagornov, P. A. Lyakhov, G. V. Valuev, Application of the residue number system to reduce hardware costs of the convolutional neural network implementation, Mathematics and Computers in Simulation 177, 2020-11-01, עמ' 232–243 doi: 10.1016/j.matcom.2020.04.031
- ^ Zhang, Wei, Shift-invariant pattern recognition neural network and its optical architecture, Proceedings of Annual Conference of the Japan Society of Applied Physics.
- ^ Zhang-1990-AppliedOptics-SIANN.pdf, Google Docs
- ^ Aäron van den Oord, Sander Dieleman, Benjamin Schrauwen, Deep content-based music recommendation, Advances in Neural Information Processing Systems 26 (2013) 26, Neural Information Processing Systems Foundation (NIPS), 2013
- ^ Ronan Collobert, Jason Weston, A unified architecture for natural language processing: deep neural networks with multitask learning, Proceedings of the 25th international conference on Machine learning, ICML '08, Association for Computing Machinery, 2008-07-05, עמ' 160–167 doi: 10.1145/1390156.1390177
- ^ Oleksii Avilov, Sébastien Rimbert, Anton Popov, Laurent Bougrain, Deep Learning Techniques to Improve Intraoperative Awareness Detection from Electroencephalographic Signals, 2020 42nd Annual International Conference of the IEEE Engineering in Medicine Biology Society (EMBC), 2020-07, עמ' 142–145 doi: 10.1109/EMBC44109.2020.9176228
- ^ Hamed Habibi Aghdam, Elnaz Jahani Heravi, Guide to convolutional neural networks: a practical application to traffic-sign detection and classification, 2017, מסת"ב 978-3-319-57550-6. (בenglish)
- ^ Alastair Hudson, Ten things you need to know about company law, Second edition. | Abingdon, Oxon; New York, NY: Routledge, 2017.: Routledge, 2017-07-06, עמ' 9–12
- ^ K. Fukushima, Neocognitron: a self organizing neural network model for a mechanism of pattern recognition unaffected by shift in position, Biological Cybernetics 36, 1980, עמ' 193–202 doi: 10.1007/BF00344251
- ^ Dan Ciregan, Ueli Meier, Jürgen Schmidhuber, Multi-column deep neural networks for image classification, 2012 IEEE Conference on Computer Vision and Pattern Recognition, 2012-06, עמ' 3642–3649 doi: 10.1109/CVPR.2012.6248110
- ^ Yann LeCun, Yoshua Bengio, Geoffrey Hinton, Deep learning, Nature 521, 2015-05-28, עמ' 436–444 doi: 10.1038/nature14539
- ^ T. Kitamura, S. Takei, Speaker recognition model using two-dimensional mel-cepstrum and predictive neural network, Proceeding of Fourth International Conference on Spoken Language Processing. ICSLP '96, IEEE doi: 10.1109/icslp.1996.607972
- ^ Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton, ImageNet classification with deep convolutional neural networks, Communications of the ACM 60, 2017-05-24, עמ' 84–90 doi: 10.1145/3065386
- ^ Håkan Wieslander, Philip J. Harrison, Gabriel Skogberg, Sonya Jackson, Deep Learning With Conformal Prediction for Hierarchical Analysis of Large-Scale Whole-Slide Tissue Images, IEEE Journal of Biomedical and Health Informatics 25, 2021-02, עמ' 371–380 doi: 10.1109/JBHI.2020.2996300
- ^ Y. W. Chow, R. Pietranico, A. Mukerji, Studies of oxygen binding energy to hemoglobin molecule, Biochemical and Biophysical Research Communications 66, 1975-10-27, עמ' 1424–1431 doi: 10.1016/0006-291x(75)90518-5
32947182רשת קונבולוציה