Խորը նեյրոնային ցանցերի կիրառություն

Ինչու են անհրաժեշտ նեյրոնային ցանցերն ու ինչպես ենք մարզում դրանք

Խորը նեյրոնային ցանցը բարդ ծրագիր է։ Կառուցվածքորեն այն բաղկացած է հսկայական թվով արհեստական նեյրոններից, որոնք ձևավորում են թաքնված շերտեր, որտեղ էլ մենք կարող ենք կարգավորել նեյրոնների կշիռները։ Առաջին՝ մուտքային շերտը, ստանում է թաքնված շերտերում մշակվող հատկությունների վեկտոր, որը նկարագրում է առարկան։ Մենք բազմապատկում ենք մուտքային վեկտորը մատրիցի կշռի հետ, արդյունքում ստացվող վեկտորը տեղափոխվում է հաջորդ շերտ և այսպես շարունակ: Վերջնական վեկտորը ուղարկվում է ցանցի ելքային շերտ:  

Յուրաքանչյուր նեյրոնային ցանցի համար պետք է ստեղծենք բազում պարամետրեր չափազանց շատ ձեռքով կարգավորելու համար, և, հետևաբար, պատրաստում ենք նեյրոնային ցանց՝ ուսումնասիրվող որոշակի տվյալների բազայի հիման վրա։ Այս գործընթացի ընթացքում ցանցը փոխում է կշիռներն այնպես, որ բոլոր հաշվարկների ու ազդանշանի մշակման արդյունքները ունենան ցանկալի ելք։ Կշիռները փոփոխելու համար մենք օգտագործում ենք պարզ օպտիմալացման ալգորիթմ, որը հիմնված է գրադիենտային վայրէջքի մեթոդի վրա․ այն թույլ է տալիս հետևել ազդանշանի մշակման արդյունքին՝ քայլ առ քայլ և աննշան փոփոխելով յուրաքանչյուրի կշիռները։ Կառուցվածքը կոչվում է «խորը» նեյրոնային ցանց, քանի որ մենք կարգավորում ենք ցանցի բազմաթիվ շերտերում գտնվող կշիռները։ 

Սովորաբար որքան բարդ է լինում նեյրոնային ցանցը (այսինքն՝ ունի անվելի շատ շերտեր ու նեյրոններ և ավելի շատ համակարգչային գործողություններ է կատարում), այնքան ավելի լավ արդյունքներ է գրանցում, բայց նաև մեզ համար ավելի բարդ է հասկանալ, թե ինչ է կատարվում իր թաքնված շերտերում։ Այնուամենայնիվ, նոր ալգորիթմների շնորհիվ, որոնք օգնում են պատկերավորել ցանցերի ներքին շերտերում իրականացվող գործողությունները, վերջերս սկսել ենք ավելի լավ հասկանալ դրանք։   

Ուսուցման մեթոդներ

Եթե աշխատում եք ինչ-որ խնդրի վրա, որին նախկինում ոչ ոք չի առնչվել, ապա նեյրոնային ցանց ստեղծելու համար պետք է պատրաստեք մարզման տվյալների բազմության նմուշ, որի գործընթացը շատ ժամանակ կխլի (սովորաբար գրեթե ողջ ժամանակը)։ Համակարգչային տեսլականից մենք գիտենք՝ ինչպես մոտենալ առաջադրանքների մեծ մասին և գրեթե բոլորի համար կա ուսուցման մարզման տվյալների բազմություն՝ օգնելու համար սկսել աշխատանքը։ Այնուամենայնիվ, եթե ցանկանում եք լուծել խնդիրը ավելի արդյունավետորեն, ապա ստիպված եք հավաքել նոր տվյալներ (նկարներ, տեսանյութեր և այլն) և սորտավորել դրանք կամ տալ որոշակի հրահանգներ` դրանք մշակելու համար։ 

Կարևոր է հավաքել մեծ ուսուցման բազմություն, քանի որ նույնիսկ հասարակ նեյրոնային ցանցը, որը մարզված է լավ բազայի վրա, կտա ավելի լավ արդյունք, քան բարդ կառուցվածք ունեցող այն ցանցը, որի բազան ավելի փոքր է։ Սակայն հիմա, խառը բազաները գնալով դառնում են ավելի կարևոր․ օրինակ՝ ցանցը կարող է մշակվել երկու տվայլների բազաների վրա, որոնցից մեկը մեծ ու բազմազան է, բայց սխալ է դասակարգված կամ դասակարգված չէ ընդհանրապես, և մյուս ցանցը ճշտորեն դասակարգված է, սակայն մեծ ու բազմազան չէ։ Այս պարագայում անհրաժեշտ է ստեղծել նոր ալգորիթմ, որը թույլ կտա ճիշտ մարզել նեյրոնային ցանցը երկու մարզման բազաների վրա:

Ցանցը մարզելու համար մենք կարող ենք օգտագործել վերահսկվող կամ առանց վերահսկման ուսուցում: Վերահսկվող ուսուցում նշանակում է, որ ունենք մուտքային և նպատակային վեկտորների զույգեր, որոնք տալիս ենք նեյրոնային ցանցին․ այսինքն խնդիրն ու իր լուծումը նախապես հայնտի են մեզ։ Յուրաքանչյուր մարզման օրինակ սնուցվում է ցանցից, այնուհետև մշակվում է ներքին շերտերում և հետո ցանցը հաշվարկում է ելքն ու համեմատում ակնկալվող արդյունքի հետ։ Սա թույլ է տալիս ցանցին հաշվարկել սխալի գործակիցը, որն էլ օգնում է հետագայում կարգավորել կշիռները։ Այս գործողությունը կրկնվում է այնքան ժամանակ, մինչև որ ցանցի ամբողջ մուտքային վեկտորների բազայի վրա սխալի գործակիցը հասնում է հնարավոր նվազագույնին։ Այս կերպ ցանցը սովորում է դասակարգել տվյալները՝ հետևելով օրինակին, և կատարել խելամիտ կանխատեսումներ նոր տվյալների բազայի համար։ 

Չվերահսկվող ուսուցում նշանականում է, որ գիտենք միայն մուտքային վեկտորները, և նեյրոնային ցանցը ինքն է փնտրում օրինաչափություններ տվյալներում և տալիս է ելքային լավագույն արդյունքը։ Արդյունքում առաջացած վեկտորների տեսակը կախված է չվերահսկվող ուսուցման առանձնահատկությունից:

Նեյրոնային ցանցի հետ աշխատելու ամենաարդյունավետ միջոցը չվերահսկվող ուսուցումը վերահսկվող դարձնելն է. վերջին հինգ տարում սա թույլ տվեց հասնել բազում լուրջ առաջխաղացումների: Օրինակ, նեյրոնային ցանցին տալիս ենք աղավաղված տվյալներ (դրանք կարող են լինել արտահայտություններ, որոնցում բացակայում են որոշ բառեր), և ցանցը փորձում է լրացնել բացերը: Մեկ այլ օրինակով կարող ենք ցանցին կցել սև ու սպիտակ նկարներ և պահանջել, որ այն վերականգնի գույները: Հարկավոր չէ նախօրոք պատրաստել տվյալներն ու հստակեցնել ակնկալվող արդյունքը․ մենք արդեն ունենք հսկայական քանակությամբ նմանատիպ նկարներ, որոնք կարող ենք ներբեռնել համացանցից։ Նեյրոնային ցանցի համար այս մարզումը հիշեցնում է վերահսկվող ուսուցումը․ այն ստանում է սև ու սպիտակ նկար կամ բացթողումով բառակապակցություն, և այնուհետև պետք է վերականգնի տվյալները՝ հետևելով օրինակներին։ 

Կա նեյրոնային ցանցի ուսուցման երրորդ եղանակ, որը մեր նկարագրած երկուսի խառնուրդն է՝ վերահսկվող ուսուցում (երբ ցանցին ասում են`սխալ թույլ տվել է, թե ոչ) և չվերահսկվող ուսուցում (երբ ցանցը չի ստանում դասակարգման վերաբերյալ որևէ ցուցում): Մարզման այս երրորդ եղանակը կոչվում է ուժեղացման ուսուցում: Այն թույլ է տալիս մարզել նեյրոնային ցանցը ոչ թե ցանկալի վեկտորները կանխատեսելու համար, այլ որոշակի ձևով վարվելու․ օրինակ՝ ստեղծել որոշակի ժանրի տեքստեր: Սա շատ նման է մարդու սովորելու գործընթացին․ նեյրոնային ցանցը փոխում է իր վարքի մոդելը` հիմնվելով սեփական փորձի և իր գործողությունների հետևանքների վրա:   

Վերահսկվող ուսուցման հետ աշխատելը ամենադյուրինն է, եթե առկա է լավ դասակարգված տվյալների բազա կամ, երբ ինքներս ենք հավաքում և դասակարգում տվյալները։ Դժբախտաբար, հիմնականում մարզման բազայի չափը չափազանց մեծ է և, հետևաբար, դժվար է տվյալների ձեռքով մշակումը. այս դեպքում մարդիկ սովորաբար օգտագործում են առանց վերահսկման ուսուցում, և հետո մարզումը իրականացվում է դասակարգված փոքր տվյալների բազայում։ 

Մեքենայական ուսուցման մեթոդներից մեկը տվյալների փոխանցումն է։ Նեյրոնային ցանցից, որը նախատեսված է լուծելու որոշակի խնդիր, պահանջվում է լուծել նոր խնդիր՝ սահմանափակ քանակությամբ տվյալների միջոցով։ Դիցուք, նեյրոնային ցանցը սովորել է ճանաչել շների ցեղատեսակները և հիմա մենք ուզում ենք, որ այն ճանաչի նաև կատուների ցեղատեսակները։ Քանի որ շներն ու կատուները ինչ-որ չափով իրար նման են, ցանցի՝ շներին ճանաչելու փորձառությունը, կարող է օգտագործվել այս նոր խնդիրը լուծելու համար։ 

Այնուամենայնիվ, մենք սահմանափակված ենք մի հիմնարար խնդրով, որը դեռևս լուծում չի ստացել. չնայած նրան, որ համակարգչային հզորությունն ու ցանցերի պարամետրերի կարգավորման քանակները աճում են, ալգորիթմները կարող են փոխանցել տվյալներ միայն նմանատիպ առաջադրանքների միջև։ Օրինակ՝ համակարգչային տեսլականը հնարավորություն է տալիս միաժամանակ լուծելու ավելի ու ավելի շատ խնդիրներ, բայց, ի վերջո, ցանկացած ցանցի ինչ-որ պահի անհրաժեշտ կլինի ավելի շատ համակարգչային ռեսուրսներ, քան կարող է ստանալ, և այդ պատճառով աշխատանքի արդյունավետությունը յուրաքանչյուր առաջադրանքի համար սկսում է նվազել։ Սա, հավանաբար, նշանակում է, որ մեր ալգորիթմները կատարյալ չեն. մինչ այժմ, նեյրոնային ցանցերը զիջում են մարդկային ուղեղի տվյալները տեղափոխելու հնարավորությանը՝ տարբեր խնդիրներ լուծելիս։        

Նեյրոնային ցանցերի սահմանափակումները     

Որոշ առաջադրանքներ նեյրոնային ցանցերը կատարում են նույնքան լավ, որքան մարդիկ, երբեմն էլ՝ ավելի լավ։ Օրինակ՝ նկարի լավ լուսավորության ու որակի պարագայում նրանք ճանաչում են դեմքերը, ավելի ճշգրտորեն կանխագուշակում են սպիտակուցային կառուցվածքները, հաղթում են մարդկանց շախմատում և գո խաղում։ Նրանք արդեն կարողանում են վերահսկել CCTV-ի տվյալները և արձագանքել հնարավոր վտանգավոր իրավիճակներում: 

Այնուամենայնիվ, նեյրոնային ցանցերը մարդկանցից ավելի վատ են գնահատում կանխատեսումների ճշգրտությունը, և չնայած, որ մարդը կարող է խոստովանել, որ ինքն ինչ-որ բանում վստահ չէ, նեյրոնային ցանցը երբեք չի կարող դա անել: Օրինակ, եթե նեյրոնային ցանցը մարզվել է կատուների ցեղերը հայտնաբերելու հարցում, և մենք նրան ոչխար ենք ցույց տալիս, ապա այն դասակարգելու է որպես կատվի ցեղատեսակ՝ լիակատար վստահությամբ: Հետևաբար, եթե դասակարգման մեջ կան սխալներ, ապա նեյրոնային ցանցը չի դադարի մտածել դրանց մասին և պարզապես կընդունի դրանք որպես ճշմարտություն։   

Դեռևս, խնդիրների մեծ մասի լուծման ամենաարդյունավետ միջոցը մարդու և նյարդային ցանցի համագործակցությունն է: Օրինակ՝ շախմատի կամ գոի ամենալավ խաղացողները «կենտավրոսներն» են, այսինքն՝ նյարդային ցանցի և մարդկային խաղացողի թիմերը, չնայած գուցե վերջին շրջանում մարդկանց հետ համագործակցությունից որոշ նեյրոնային ցանցեր ավելի քիչ են օգուտներ ստանում: Այնուամենայնիվ, շախմատը կամ գոն արհեստական իրավիճակներ են. իրական աշխարհում, երբ անհրաժեշտ է լինում մարդկանց առողջ բանականություն և հասկացողություն, մարդիկ շատ ավելի լավ են գործում, քան նեյրոնային ցանցերը: 

Համակարգչային տեսլական

Գրեթե բոլոր համակարգչային տեսլականի խնդիրների լուծման լավագույն միջոցը կոնվոլյուցիոն նյարդային ցանցերի օգտագործումն է. ճկուն կառուցվածք, որը մշակում է տարբեր տեսակի ազդանշաններ՝ ներառյալ միաչափ (ձայնային), երկչափ (պատկեր) կամ եռաչափ (3D առարկաներ): Այս տեսակի ցանցերը հիմնված են կոնվոլյուցիոն շերտերի վրա, որում նախորդ շերտից ստացված տեղեկատվությունը մշակվում է մասերով։ Սովորելու գործընթացի ժամանակ, նյարդային ցանցն ինքն է որոշում կոնվոլյուցիոն շերտերի պարամետրերը («միջուկներ»)։

Կոնվոլյուցիոն նյարդային ցանցում կա երկու տեսակի շերտ: Կոնվոլյուցիոն շերտերը հաշվարկում են նեյրոնների ակտիվացումների գծային համադրությունը նախորդ շերտի վրա, որը թույլ է տալիս ստեղծել առանձնահատկությունների քարտեզ. այն ցույց է տալիս, արդյոք շերտում առկա է որոշակի առանձնահատկություն: Յուրաքանչյուր կոնվոլյուցիոն շերտ ստեղծում է առարկայի նոր նկարագրություն (հետևաբար, ելքում ստանում ենք շատ պատկերներ): Հավաքող շերտերը պատկերը մի քանի անգամ փոքրացնում են․ նրանք փոխարինում են միմյանց մոտ տեղակայված նեյրոնների ակտիվացումը իրենց առավելագույն կամ միջին արժեքով: Կոնվոլյուցիոն և հավաքող շերտերը փոխարինում են միմյանց: Վերջում ստանում ենք նվազագույն չափերով և լայն ծավալով պատկեր, որտեղ պատկերի վերաբերյալ հետաքրքրություն առաջացնող ամբողջ տեղեկատվությունը կոդավորված է։ Կոնվոլյուցիոն ցանցերը թույլ են տալիս պատկերներից դուրս բերել իմաստալից տեղեկատվություն, ապա վերլուծել տվյալները և ճանաչել առարկաները: Այս տեխնոլոգիան օգտագործվում է բժշկության մեջ, (օրինակ` ՄՌՏ հետազոտություն) ճանաչելու և մշակելու կենսաբժշկական պատկերները՝ ավելի ճշգրիտ ախտորոշման համար։ 

Նեյրոնային ցանցերը լայնորեն օգտագործվում են նաև ինքնակառավարվող մեքենաներում: Այստեղ հիմնական խնդիրը դրանց անվտանգությունն ապահովելն է. մինչ այժմ դրանք վարորդներից անվտանգ չեն, և պարզվել է, որ միայն մեքենայական ուսուցման միջոցով անվտանգությունը բարձրացնելը չափազանց բարդ է, և, այդ իսկ պատճառով, հասարակությունը դեռևս պատրաստ չէ ընդունել դրանք: Թերևս ամենաէական դժվարությունը կայանում է մարդկանց՝ և՛ հետիոտների, և՛ վարորդների վարքագիծը մոդելավորելու մեջ։ Այսպիսով, մեքենան կկարողանա կանխատեսել բոլոր ճանապարհը օգտագործողների գործողությունները։ Ինքնակառավարվող մեքենաները սարքավորված են բազմատեսակ ճանաչողական համակարգերով, որոնք օգնում են տեղեկություններ ստանալ միջավայրի, վայրի և մարմինների շարժման ուղղության մասին, որն օգնում է կարգավորել ընթացքը՝ արագությունը, հետագիծը և այլն։ Այնուամենայնիվ, նրանք դեռևս սխալներ են թույլ տալիս: Օրինակ՝ կա մի պատմություն, որտեղ Տեսլան մեքենան վարելիս, ստանում էր շատ տեղեկություններ տեսախցիկներից, սակայն այնուհետև ամբողջ արագությամբ բախվում է իր ճանապարհը փակող սպիտակ բեռնատարին: Պարզվեց, որ ճանաչողական համակարգը երբեք չէր տեսել նման մարզման օրինակ, այդ պատճառով էլ սպիտակ կցասայլը շփոթել էր ամպի հետ և որոշել էր չդանդաղեցնել արագությունը, մինչդեռ բեռնատարի վարորդը հույս ուներ, որ գլխավոր ճանապարհի մեքենան կանգ կառնի (ինչը երթևեկության կանոնների խախտում էր): Մարդն արագ կվերլուծեր իրավիճակն ու կկանգնեցներ Տեսլան։ Ինչպե՞ս խուսափել նման իրավիճակներից: Սա բարդ հարց է: Տեխնիկապես մենք կարող ենք նեյրոնային ցանցերին ցույց տալ բազմաթիվ օրինակներ, որտեղ մարդիկ խախտումներ են կատարում․ օրինակ կարող ենք կառուցել մի մոդել, որը կստեղծի այսպիսի իրավիճակներ կամ կվերցնի դրանք իրական կյանքից (օրինակ, այն ընկերություններից, որոնք զարգացնում և փորձարկում են ինքնակառավարման համակարգեր): Այնուամենայնիվ, դեռ կա հավանականություն, որ մենք հաշվի չենք առնի որոշ գործոններ կամ գործոնների համադրություններ, որոնք կարող են վթարի պատճառ հանդիսանալ, հանգեցնելով նրան, որ նեյրոնային ցանցը չի կարողանա սովորել՝ ինչպես վարվել այդպիսի իրավիճակներում։ 

Պատկերի ստեղծում  

Վերջերս պարզել ենք, որ կարող ենք նեյրոնային ցանցերը մարզել ոչ միայն ճանաչելու, այլև պատկերներ ստեղծելու համար, չնայած դա անելն ավելի դժվար է, քանի որ այն պահանջում է ավելի լավ պատկերացումներ դեմքի հատկությունների մասին, այլ ոչ թե ուղղակի դեմքի ճանաչում։ Այս ոլորտում առաջին աշխատանքները տպագրվել են 2010-ականների սկզբին. մասնավորապես, 2014-ին Ալեքսեյ Դոսովիցկին հրապարակել է հոդված՝ նվիրված աթոռների պատկերների ստեղծմանը, որը բավականին բազմազան օբյեկտի դաս է։ Այս հոդվածը մեծ հետաքրքրություն առաջացրեց հետազոտողների շրջանում, և նրանք սկսեցին մշակել պատկերների ստեղծման նոր մեթոդներ: Ներկայումս մշակվում է ալգորիթմների լայնածավալ դաս․ դրանք հիմնված են դասական համակարգչային գրաֆիկայի վրա, որը կապված չէ մեքենայական ուսուցման հետ, և խորը ուսուցման հետ: Այս համադրությունը մեզ բավականին հետաքրքիր արդյունքներ է տալիս:  

Նմանատիպ պատկերի գեներատորների ծրագրերից մեկը հեռատեսության համակարգերն են, որոնք կօգնեն մարդկանց շփվել հեռավորության վրա՝ տարբեր տեխնիկական միջոցների շնորհիվ ստանալով իրենց զրուցակցի եռաչափ պատկերը, մոնիտորները, վիրտուալ ակնոցները և այլն։ Հարցն այն է, թե ինչպես կարելի է պատկերը հնարավորինս իրականին մոտ դարձնել և ճիշտ ֆիքսել մարդկանց արտաքին տեսքը, դեմքի արտահայտությունները, շարժումները, ժեստերը և այլն, որոնք անհրաժեշտ են հաղորդակցման գործընթացի ոչ վերբալ մասը ապահովելու համար: Այս ամենը զրույցը կդարձնի ավելի հետաքրքիր և կօգնի ստեղծել տպավորություն, որ մարդն իրականում այդտեղ է գտնվում։ Այս խնդիրը լուծելու համար մենք ստիպված ենք նեյրոնային ցանցը պատրաստել հսկայական քանակությամբ տեսանյութերի և նկարների վրա։

Այս տեխնոլոգիայի կիրառման մեկ այլ խոստումնալից ոլորտ է անիմացիայի և կինոյի արդյունաբերությունը: Այսօր նեյրոնային ցանցերը կարող են ստեղծել մուլտֆիլմեր՝ հիմնվելով տեքստային նկարագրությունների վրա. նրանք թույլ տալիս են սխալներ, սակայն հեշտացնում են անիմատորների աշխատանքը։ Նրանք նույնիսկ օգնում են գրել երաժշտություն և ֆիլմերի սցենարներ: Բացի այդ, դրանք ավելի էժանացնում և հեշտացնում են ֆիլմերում տեսողական էֆեկտների ստեղծումը, որտեղ սովորաբար օգտագործվում էին ավանդական համակարգչային գրաֆիկա:

Մեքենայական թարգմանություն

Մեքենայական թարգմանությունը կախված է հաջորդականությունների հետ աշխատանքից. ունենք բառերի մուտքային հաջորդականություն մեկ լեզվով, օրինակ՝ արտահայտություն կամ մի ամբողջ պարբերություն, և պետք է բառերի նույն հաջորդականությունը ստանանք մեկ այլ լեզվով: Մի արտահայտությունը սովորաբար հարյուր բառից քիչ է, ինչը շատ ավելի քիչ է, քան մեկ նկարի պիքսելները․ այնուամենայնիվ, տարրերից յուրաքանչյուրը շատ ավելի բարդ է, քան պիքսելը: Այժմ ալգորիթմների մեծ մասն այս տեսակի առաջադրանքների համար օգտագործում է հսկայական բառարան:

Այստեղ լավագույն լուծումը տրանսֆորմատորն է՝ 2010-ականների կեսերին մշակված մոդել, որն ապացուցեց, որ լավագույն արդյունքն է տալիս տեքստի վերլուծության և մեքենայական թարգմանության մեջ: Տեքստի յուրաքանչյուր տարր անհատապես մշակվում է որպես վեկտոր, որի դիրքն անգիր է արված հաջորդականության մեջ: Գործընթացի յուրաքանչյուր փուլում ակտիվանում է այսպես կոչված ուշադրության մեխանիզմը. երբ որոշակի բառ նկարագրող վեկտորը թարմացվում է, տրանսֆորմատորն իր ուշադրությունը կենտրոնացնում է արտահայտության այլ բառերի վրա: Ուշադրության աստիճանը կանխատեսում է տրանսֆորմատորը, որը հիմնված է նախորդ քայլերում հաշվարկված վեկտորների վրա: Տրանսֆորմատորի ուշադրությունը գրաված բառերի վեկտորներն ամփոփվում և բազմապատկվում են մատրիցով, և արդյունքում ստացվող վեկտորը (կոնտեքստի վեկտոր) օգտագործվում է բառի նեկայացումը թարմացնելու համար։ Այս գործընթացը ռեկուրենտ ցանցի նման հաջորդական չէ, այլ զուգահեռ է։ 

Չնայած տրանսֆորմատորի առավելություններին այլ նյարդային ցանցերի նկատմամբ (օրինակ՝ ռեկուրենտ և կոնվոլյուցիոն ցանցեր)՝ նրա համար դեռևս դժվար է ստեղծել բարձրորակ գրական թարգմանություն, քանի որ այն դեռ չի կարողանում ընկալել տեքստերի էության նրբությունները։ Այն լավագույնս աշխատում է իրավաբանական գրականության և նմանատիպ տեքստերի հետ, որտեղ օգտագործվում են ստանդարտ ձևակերպումներ. նաև շատ ավելի հեշտ է հավաքել մարզման օրինակներ այս տեսակի տեքստերի համար։ 

Բնօրինակի հեղինակ՝ Victor Lempitsky, Serious Science


Թարգմանիչ՝ Մարիետա Ստեփանյան (Marieta Stepanyan) © Բոլոր իրավունքները պաշտպանված են։