משתמש:האדם-החושב/רשת עצבית מתפתחת

מתוך ויקיפדיה, האנציקלופדיה החופשית

רשת עצבית מתפתחת (CNNConvolutional Neural Network), הינה סוג של רשת עצבית מלאכותית המשמשת בעיקר לניתוח תמונה[1].

שם נוסף המתאים לה הינו רשת עצבית מלאכותית בחלל (SIANN – Space Invariant Artificial Neural Network).

היא המבוססת על שכבות כינוס (באנגלית: convolution layers) הממומשות על ידיי העברת מסננת (filter) או ליבה (karnel) על גביי הקלט וביצוע כפל מטריצות, הפלט נקרא feature map[2][3].

לרשתות עצביות מתפתחות יש שימושים רבים בתחום הראייה ממוחשבת, מערכות המלצה[4], עיבוד שפה טבעית[5], ממשק מוח-מחשב[6] ועוד תחומים רבים.

ארכיטקטורה

השוואה בין ארכיטקטורת LeNet ו AlexNet

רשת עצבית מתפתחת עושה שימוש בדרך כלל בשכבות 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.

כמובן שיכול להיות שימוש בעוד הרבה סוגי שכבות אבל אלה הנפוצות והבסיסיות ביותר.

קונבולוציה על תמונה בגודל 4x4 (כחול) עם ליבה בגודל 3x3 (צל כחול כהה) וקפיצות בגודל 1 היוצרת תמונה חדשה בגודל 2x2 (טורקיז)

שכבת כינוס

עוברים על הטנזור ומכפילים עם הליבה (באנגלית: kernel) שהיא טנזור בגודל עם קפיצות בגודל כאשר מייצג את גודל הקפיצה בציר ה- ו מייצג את גודל הקפיצה בציר ה- (בדרך כלל ו יהיו באותו גודל ולכן פשוט יקראו כנ"ל לגביי ), כאשר כל ליבה יכולה לשמש לצורך מטרה שונה.

או פשוט .

כאשר מייצג את התמונה החדשה, מייצג את התמונה המקורית ו מייצג את הליבה.

גודל הפלט של שכבת כינוס עם חלון בגודל וקפיצות (strides) בגודל טנזור קלט בגודל

כאשר הם ממדיי הפלט.

שכבת אגרגציה (pooling)

max pooling עם ליבה בגודל 2x2 וקפיצות בגודל של 2

עוברים עם חלון בגודל ועושים פעולה מתמטית המוציאה מספר אחד למשל במקרה של max pooling ניקח את המספר הגדול ביותר שיצא בגבולות החלון שלנו בכל החלקה במקרה של average pooling ניקח את כל המספרים שיצאו בגבולות החלון שלנו ונעשה להם ממוצע[12].

ביצוע max pooling עם חלון בגודל וקפיצות (strides) בגודל טנזור קלט בגודל

כאשר הם ממדיי הפלט ו .

גודל הפלט של שכבת אגרגציה עם חלון בגודל וקפיצות (strides) בגודל טנזור קלט בגודל

כאשר הם ממדיי הפלט.

שכבת ReLU

Rectified linear unit ‏(ReLU) פונקציית אקטיבציה מאוד פופולרית בקרב רשתות עצביות מתפתחות עוברת על כל נוירון ומבצעת בו פונקציית יחידה לינארית מתוקנת

הפונקציה עבור כל נוירון הטווח של פונקציה זאת הינו .

שכבת dropout

נועדה למנוע התאמת יתר (overfitting)[13][14] תופעה שבה המודל מתאים את עצמו לדאטה הספציפית שאימנו אותו עליה ולא יודע להכליל למשל מודל שניסנו ללמד אותו להבדיל בין תמונות של חתולים לתמונות של לא חתולים אם יתרחש overfitting המודל יוכל לסווג את כל תמונות החתולים שאימנו אתו עליהם בצורה טובה אך ברגע שניתן לו תמונות של חתולים שהוא לא מכיר הוא יתחיל לסווג ממש גרוע. דוגמה נוספת: זה כמו ילד בכיתה א שמשנן ש 1+2=3 אבל בגלל שהוא לא מבין לעומק ברגע שניתן לו את השאלה כמה זה 1+4 הוא לא ידע את התשובה.

השכבה פועלת בצורה כזאת היא מקבלת את וקלט של שכבת נוירונים והיא תתעלם מנוירונים אקראיים כלומר לכל נוירון יש סיכוי להישמר או סיכויים להישמט.

משתנים כלליים

גודל הליבה (kernel)

הליבה היא הריי טנזור וצריך לבחור את ממדיי הטנזור בדרך כלל הגדלים יהיו או או אבל כמובן אפשרי לבחור כל גודל רצוי כל עוד הוא גדול מאפס כמובן.

ריפוד

ריפוד (באנגלית: padding) נועד על מנת לפתור שתי בעיות:

  1. במהלך ביצוע כינוס נוצרת בעיה אנחנו בעצם עוברים פחות פעמים על קצוות התמונה וכתוצאה מכך מאבדים מידע יקר ערך אומנם זה יכול להראות שולי אבל לאחר שימוש בהרבה שכבות כינוס במודל זה מצטבר להרבה מה גם זה פרקטיקה רעה לא לנצל את כל הדאטה.
  2. לאחר כל שימוש בכינוס התמונה תקטן ובעצם אם נשתמש בכמה שכבות כינוס נוכל באיזשהו שלב להגיע למצב שבו אנחנו צמצמנו את התמונה עד כדיי מחיקתה.

תהליך הריפוד בעצם "מרפד" את התמונה באפסים מצדדיה ובכך פותר את שתי הבעיות כי עכשיו אנו עוברים גם על הקצוות כמו שצריך וגם לאחר כינוס התמונה תישאר באותו הגודל (כמובן בהנחה שהוספנו את הריפוד בגודל המתאים).

למשל לתמונה בגודל של עם ליבה בגודל וקפיצות בגודל של אחד אם נוסיף שכבת ריפוד אחת מכל כיוון לאחר כינוס נשאר עם תמונה בגודל כלומר לא הקטנו אותה.

כמובן שבגלל שריפדנו באפסים אין לחשוש להטיית/עיוות התוצאות כתוצאה מהריפוד[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)

הערות שוליים

  1. ^ 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
  2. ^ Zhang, Wei, Shift-invariant pattern recognition neural network and its optical architecture, Proceedings of Annual Conference of the Japan Society of Applied Physics.
  3. ^ Zhang-1990-AppliedOptics-SIANN.pdf, Google Docs
  4. ^ 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
  5. ^ 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
  6. ^ 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
  7. ^ Hamed Habibi Aghdam, Elnaz Jahani Heravi, Guide to convolutional neural networks: a practical application to traffic-sign detection and classification, 2017, ISBN 978-3-319-57550-6. (בenglish)
  8. ^ 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
  9. ^ 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
  10. ^ 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
  11. ^ Yann LeCun, Yoshua Bengio, Geoffrey Hinton, Deep learning, Nature 521, 2015-05-28, עמ' 436–444 doi: 10.1038/nature14539
  12. ^ 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
  13. ^ 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
  14. ^ 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
  15. ^ 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

קטגוריה:בינה מלאכותית קטגוריה:אלגוריתמים קטגוריה:למידה חישובית