Отрав­ляю­щие при­зна­ки для де­ре­вьев ре­ше­ний

Воз­мож­но, пред­став­лен­ные здесь наблю­де­ния вер­ны и для дру­гих клас­сифи­ка­то­ров. Кро­ме то­го, мо­жет ока­зать­ся, что опи­сан­ное здесь яв­ле­ние ши­ро­ко из­вест­но и име­ет осо­бое на­зва­ние. Бе­ру на се­бя риск на­пи­сать эту за­мет­ку без про­ве­де­ния пред­ва­ри­тель­но­го ис­сле­до­ва­ния в Ин­тер­не­те.

До­пу­стим, вы ре­ша­е­те за­да­чу рас­по­зна­ва­ния изоб­ра­же­ний, ис­поль­зуя по­пу­ляр­ный клас­сифи­ка­тор — де­ре­вья ре­ше­ний. И, как это обыч­но бы­ва­ет, ва­шей си­сте­ме не­до­ста­ёт точ­но­сти, при­чём точ­ность на обу­чаю­щей и те­сто­вой вы­бор­ках схо­жая (пе­ре­обу­че­ния нет). На­при­мер, си­сте­ма от­ли­ча­ет муж­чин от жен­щин с точ­но­стью 90%, а нуж­но в два ра­за луч­ше — 95%.

До­пол­ни­тель­ные при­зна­ки мо­гут ид­ти во вред

При­зна­ки ма­ло­ин­фор­ма­тив­ных при­зна­ков (при усло­вии, что пе­ре­обу­че­ния нет):

  • при­зна­ков мно­го, и от до­бав­ле­ния ещё по­доб­ных точ­ность не рас­тёт;
  • при уве­ли­че­нии объ­ё­ма обу­чаю­щей вы­бор­ки точ­но­сти рас­тёт очень мед­лен­но;
  • по­чти про­пор­цио­наль­но объ­ё­му обу­чаю­щей вы­бор­ки рас­тёт клас­сифи­ка­тор;
  • от па­ра­мет­ров по­строе­ния клас­сифи­ка­то­ра по­чти ни­че­го не за­ви­сит.

По­иг­рав с объ­ё­мом обу­чаю­щей вы­бор­ки и па­ра­мет­ра­ми по­строе­ния де­ре­ва, вы при­хо­ди­те к вы­во­ду, что при­зна­ки, ко­то­рые ис­поль­зу­ют­ся для клас­сифи­ка­ции (гра­ди­ен­ты и их ги­сто­грам­мы, ори­ен­та­ции, по­пар­ные раз­но­сти пик­се­лей и то­му по­доб­ные) не­до­ста­точ­но ин­фор­ма­тив­ны. Дей­стви­тель­но, ка­кая, на­фиг, раз­ность пик­се­лей, ко­гда нуж­но от­ли­чать му­жи­ка от ба­бы?!

И тут вас осе­ня­ет: в про­грам­ме есть ещё па­ра чи­сел (очень ин­фор­ма­тив­ных!), ко­то­рые мож­но до­ба­вить в при­зна­ки:

  • Пе­ред де­тек­ци­ей по­ла был из­ме­рен угол по­во­ро­та ли­ца? За­ме­ча­тель­но! Да­дим этот угол по­во­ро­та де­тек­то­ру по­ла; пусть зна­ет, ку­да по­вёр­ну­та го­ло­ва, и бе­рёт нуж­ные раз­но­сти пик­се­лей, а не ка­кие по­па­ло.

  • Или, на­при­мер, мы об­на­ру­жи­ва­ем лю­дей в кад­ре ви­део­наблю­де­ния. То­гда да­дим ко­ор­ди­на­ты те­ку­ще­го пик­се­ля в ка­че­стве до­пол­ни­тель­ных при­зна­ков. Ко­ор­ди­на­ты опре­де­ля­ют ра­курс; де­ре­ву ре­ше­ний бу­дет про­ще ра­бо­тать, ес­ли оно бу­дет знать, ка­кой ра­курс нуж­но ис­кать в кон­крет­ном ме­сте кад­ра.

  • Нуж­но из­ме­рить по­ло­же­ние зрач­ка на изоб­ра­же­нии гла­за? Но вна­ча­ле этот глаз был най­ден на ли­це. Да­дим де­тек­то­ру зрач­ка от­но­си­тель­ные ко­ор­ди­на­ты цен­тра гла­за; пусть де­тек­тор зна­ет, в ка­ком ме­сте гла­за он сей­час ра­бо­та­ет.

Воз­мож­но, вы смо­же­те при­ду­мать или вспом­нить дру­гие по­доб­ные при­ме­ры.

Итак, вы до­бав­ля­е­те су­перин­фор­ма­тив­ные при­зна­ки (па­ру чи­сел к имею­щим­ся пя­ти сот­ням), пе­ре­страи­ва­е­те клас­сифи­ка­тор — и с удив­ле­ни­ем об­на­ру­жи­ва­е­те, что точ­ность ра­бо­ты си­сте­мы на те­сто­вой вы­бор­ке упа­ла в пол­то­ра-два ра­за. Пе­ре­про­ве­ря­е­те про­грам­му — всё на­пи­са­но вер­но.

Вы встре­ти­лись с яв­ле­ни­ем, ко­то­рое я пред­ла­гаю на­звать отрав­ляю­щи­ми при­зна­ка­ми.

Но как та­кое воз­мож­но? Ведь из тео­рии игр мы зна­ем, что до­пол­ни­тель­ная ин­фор­ма­ция не мо­жет ид­ти во вред (де­ре­во ре­ше­ний мож­но рас­смат­ри­вать как стра­те­гию иг­ры), а в кни­гах по де­ре­вьям ре­ше­ний на­пи­са­но, что да­же до­бав­ле­ние слу­чай­ных чи­сел в при­зна­ки не ухуд­ша­ет по­стро­ен­ный клас­сифи­ка­тор. Од­на­ко горь­кий опыт и до­пол­ни­тель­ный ана­лиз про­бле­мы по­ка­зы­ва­ют, что отрав­ляю­щие при­зна­ки всё же су­ще­ству­ют. В слу­чае де­ре­вьев ре­ше­ний это та­кие при­зна­ки, ко­то­рые:

  1. Не не­сут су­ще­ствен­ной ин­фор­ма­ции о ре­зуль­та­те де­тек­ции/клас­сифи­ка­ции. Пе­ре­чи­тай­те спи­сок при­ме­ров вы­ше: до­пол­ни­тель­ные при­зна­ки не со­дер­жат от­ве­та за­да­чи; они при­зва­ны «по­мочь» клас­сифи­ка­то­ру пра­виль­но ис­поль­зо­вать осталь­ные при­зна­ки.
  2. Ме­ня­ют ин­тер­пре­та­цию (смысл) дру­гих при­зна­ков в од­но­сто­рон­нем по­ряд­ке, или, что то же са­мое, яв­ля­ют­ся вы­со­ко­уров­не­вы­ми от­но­си­тель­но осталь­ных при­зна­ков.
  3. Име­ют боль­шое ко­ли­че­ство воз­мож­ных зна­че­ний — де­ре­во ре­ше­ний мо­жет ис­поль­зо­вать их сно­ва и сно­ва на каж­дом уров­не.

Рас­смот­рим при­мер с рас­по­зна­ва­ни­ем по­ла и уг­лом по­во­ро­та го­ло­вы во­круг вер­ти­ка­ли. Рас­суж­де­ния в поль­зу до­бав­ле­ния уг­ла по­во­ро­та к на­бо­ру по­пар­ных раз­но­стей та­кие:

  • Пол че­ло­ве­ка по изоб­ра­же­нию ли­ца мы опре­де­ля­ем по про­пор­ци­ям эле­мен­тов это­го ли­ца.
  • Ес­ли име­ют­ся лишь по­пар­ные раз­но­сти пик­се­лей, то нуж­но вна­ча­ле по­нять, ка­кой ча­сти ли­ца эти раз­но­сти со­от­вет­ству­ют — но­су, под­бо­род­ку, гу­бам, гла­зам, или че­му-то ещё.
  • Най­ти со­от­вет­ствие меж­ду пик­се­ля­ми и ча­стью ли­ца го­раз­до про­ще, зная угол по­во­ро­та го­ло­вы.

Пред­став­лен­ные рас­суж­де­ния име­ют не­точ­ность, свя­зан­ную с тем, что клас­сифи­ка­тор мо­жет с вы­со­кой до­сто­вер­но­стью опре­де­лить пол че­ло­ве­ка по изоб­ра­же­нию ли­ца, так и не узнав, в ка­кую сто­ро­ну это ли­цо бы­ло по­вёр­ну­то (вле­во или впра­во). Это мож­но про­ве­рить сле­дую­щим экс­пе­ри­мен­том: возь­мём низ­ко­уров­не­вые при­зна­ки и де­ре­во ре­ше­ний, ко­то­рое по этим при­зна­кам с точ­но­стью 90% опре­де­ля­ет пол; про­пу­стим че­рез та­кое де­ре­во обу­ча­ю­щую вы­бор­ку уг­ла по­во­ро­та го­ло­вы во­круг вер­ти­ка­ли, пе­ре­счи­тав при этом ли­сто­вые зна­че­ния де­ре­ва. Точ­ность по­лу­чен­но­го клас­сифи­ка­то­ра не пре­вы­сит 70% для за­да­чи клас­сифи­ка­ции по­во­ро­та вле­во/впра­во. То есть, до­стиг­нув ли­сто­во­го уз­ла, де­ре­во опре­де­ле­ния по­ла в сред­нем на 90% зна­ет пол че­ло­ве­ка, и лишь на 70% зна­ет, в ка­кую сто­ро­ну по­вёр­ну­то ли­цо.

Дру­ги­ми сло­ва­ми, для опре­де­ле­ния по­ла во­все не обя­за­тель­но знать угол по­во­ро­та го­ло­вы, по­это­му по­лез­ность до­пол­ни­тель­ных при­зна­ков мо­жет быть не столь вы­со­кой, как ка­жет­ся на пер­вый взгляд. Но это не яв­ля­ет­ся при­чи­ной от­ка­за от уг­ла по­во­ро­та как при­зна­ка, ведь из пред­став­лен­но­го объ­яс­не­ния во­все не сле­ду­ет воз­мож­ный вред по­доб­ных при­зна­ков.

Ме­ха­низм отрав­ле­ния

Так что же про­ис­хо­дит с отрав­ляю­щи­ми при­зна­ка­ми?

Пре­жде все­го, чем бо­лее вы­со­ко­уров­не­вый у вас при­знак, тем слож­нее сфор­ми­ро­вать по это­му при­зна­ку ре­пре­зен­та­тив­ную вы­бор­ку. На­вер­ня­ка в имею­щей­ся у вас вы­бор­ке жен­щи­ны ча­ще при­сут­ству­ют в ра­кур­се три чет­вер­ти. Это озна­ча­ет, что с точ­ки зре­ния ал­го­рит­ма обу­че­ния угол по­во­ро­та го­ло­вы су­ще­ствен­но об­го­ня­ет по ин­фор­ма­тив­но­сти все осталь­ные при­зна­ки (че­го не долж­но быть, так как угол по­во­ро­та не не­сёт ин­фор­ма­ции и по­ле). По­де­лив не­сколь­ко раз вы­бор­ку по при­зна­ку «угол по­во­ро­та», ал­го­ритм при­дёт к со­вер­шен­но не­ре­пре­зен­та­тив­ным об­руб­кам этой вы­бор­ки, ко­то­рые ра­ди раз­но­об­ра­зия по­де­лит по осталь­ным при­зна­кам. В ито­ге по­чти по­ло­ви­на ре­шаю­щих уз­лов де­ре­ва ухва­тит­ся за угол по­во­ро­та.

По­сле по­строе­ния де­ре­ва на­сту­па­ет оче­редь под­рез­ки. Наи­бо­лее ве­ро­ят­ный сце­на­рий в опи­сан­ном слу­чае — сре­за­ние боль­шин­ства ве­ток, как пе­ре­обу­чен­ных. Вы оста­не­тесь с не­год­ным де­ре­вом из па­ры де­сят­ков уз­лов, вы­даю­щим от­вет, в ос­нов­ном, по уг­лу по­во­ро­та.

Си­ту­а­ция усу­губ­ля­ет­ся тем, что ал­го­рит­мы по­строе­ния де­ре­вьев ре­ше­ний не уме­ют нор­маль­но ра­бо­тать с вы­со­ко­уров­не­вы­ми при­зна­ка­ми, не при­бли­жаю­щи­ми к от­ве­ту за­да­чи. Это вы­зва­но ту­по­стью тех жад­ных ал­го­рит­мов, ко­то­ры­ми стро­ят­ся де­ре­вья. Да­же ес­ли вы на­бе­рё­те аб­со­лют­но ре­пре­зен­та­тив­ную вы­бор­ку по уг­лу по­во­ро­та го­ло­вы, по­стро­и­тель де­ре­ва не смо­жет ска­зать се­бе «сей­час я про­ве­ду раз­де­ле­ние по уг­лу по­во­ро­та, и то­гда по не­сколь­ким раз­но­стям смо­гу уве­рен­но опре­де­лить пол». Ал­го­ритм не про­ду­мы­ва­ет на­пе­рёд; ес­ли при раз­де­ле­нии по уг­лу ста­ти­сти­ка не ме­ня­ет­ся, то та­кое раз­де­ле­ние про­ве­де­но не бу­дет. В ито­ге при очень хо­ро­шей вы­бор­ке раз­де­ле­ние по уг­лу бу­дет про­из­во­дить­ся спон­тан­но бли­же к ли­сто­вым уз­лам, там где, опять же, угол по­во­ро­та по­те­рял ре­пре­зен­та­тив­ность.

Осо­бое удо­воль­ствие мож­но по­лу­чить, ес­ли обу­чаю­щие при­ме­ры име­ют по­вто­ряю­щие­ся зна­че­ния вы­со­ко­уров­не­вых при­зна­ков. На­при­мер, вы об­на­ру­жи­ва­е­те пры­щи на ли­це, а в ка­че­стве вы­со­ко­уров­не­вых при­зна­ков до­ба­ви­ли ко­ор­ди­на­ты эле­мен­тов ли­ца. То­гда у вас мно­го пры­щей-семплов бу­дут при­над­ле­жать од­но­му ли­цу и, зна­чит, иметь один на­бор вы­со­ко­уров­не­вых при­зна­ков. В этом слу­чае де­ре­во пол­но­стью за­пом­нит обу­ча­ю­щую вы­бор­ку, при этом да­вая ну­ле­вую точ­ность на те­сто­вой. Во­об­ще, де­ре­вья ре­ше­ний име­ют по­тря­са­ю­щую спо­соб­ность пе­ре­обу­чать­ся как при по­вто­ре­нии це­лых семплов, так и под­мно­же­ства при­зна­ков в них. Это вы­зва­но на­ру­ше­ни­ем за­щит­ных ме­ха­низ­мов клас­сифи­ка­то­ра — ми­ни­маль­но­го чис­ла эле­мен­тов в ли­сте и кон­т­ро­ля ка­че­ства на эта­пе под­рез­ки. Ведь обыч­но для под­рез­ки вы­би­ра­ют слу­чай­ное под­мно­же­ство обу­чаю­щей вы­бор­ки, не за­бо­тясь при этом, что­бы в под­ре­за­ю­щую и обу­ча­ю­щую вы­бор­ки по­па­да­ли имен­но раз­ные ли­ца, а не раз­ные пры­щи.

Не ра­бо­таю­щие ме­то­ды ле­че­ния

  • За­шум­ле­ние вы­со­ко­уров­не­вых при­зна­ков при обу­че­нии как с це­лью «урав­ни­ва­ния их свойств» с осталь­ны­ми при­зна­ка­ми, так и с це­лью из­бав­ле­ния от по­вто­ре­ний

    По­пыт­ки за­шум­ле­ния зна­че­ний с це­лью по­вы­ше­ния их ре­пре­зен­та­тив­но­сти (из­бав­ле­ния от по­вто­ре­ний) на­по­ми­на­ют мне по­пыт­ки сгла­жи­ва­ния уже го­то­вой кар­тин­ки с це­лью её ан­тиа­ли­а­син­га. Аб­сурд­ность си­ту­а­ции в том, что мы пы­та­ем­ся до­ба­вить не­до­ста­ю­щую ин­фор­ма­цию пу­тём за­шум­ле­ния/сгла­жи­ва­ния, то есть уни­что­же­ния ин­фор­ма­ции. Хо­тя Дмит­рий Ан­дре­ев не­дав­но по­ка­зал, что до­бав­ле­ние ан­тиа­ли­а­син­га пост­фак­тум всё же воз­мож­но, прав­да лишь для глад­ких гра­ниц объ­ек­тов.

    За­шум­ле­ние не ре­ша­ет ни ту, ни дру­гую про­бле­му. При­чём за­шум­лять мож­но пы­тать­ся как до­бав­ле­ни­ем ад­ди­тив­но­го шу­ма, так и за­ме­ще­ни­ем ча­сти при­зна­ков на слу­чай­ные зна­че­ния. При уве­ли­че­нии уров­ня шу­ма де­ре­во бу­дет всё ре­же брать­ся за вы­со­ко­уров­не­вые при­зна­ки, и пе­ре­обу­че­ния по этим при­зна­кам не бу­дет. Но и уве­ли­че­ния точ­но­сти вы не по­лу­чи­те: по ме­ре до­бав­ле­ния шу­ма точ­ность вер­нёт­ся к ис­ход­ной, не­до­ста­точ­но вы­со­кой (ведь имен­но из-за низ­кой точ­но­сти мы на­ча­ли ис­кать до­пол­ни­тель­ные при­зна­ки).

  • На­строй­ка па­ра­мет­ров ал­го­рит­ма

    Ни­че­го не по­мо­жет до тех пор, по­ка па­ра­мет­ры дей­ству­ют на все при­зна­ки сра­зу. Ес­ли же ва­ши ал­го­рит­мы поз­во­ля­ют на­страи­вать па­ра­мет­ры для раз­ных при­зна­ков не­за­ви­си­мо, то, воз­мож­но, вам по­вез­ло боль­ше.

  • Фор­ми­ро­ва­ние бо­лее «пра­виль­ных» вы­бо­рок для по­строе­ния и под­рез­ки де­ре­ва

    Здесь каж­дый вкла­ды­ва­ет свой смысл в при­ла­га­тель­ное «пра­виль­ный». К со­жа­ле­нию, да­же на пра­виль­ной вы­бор­ке при на­ли­чии отрав­ляю­щих при­зна­ков жад­ный ал­го­ритм по­стро­ит де­ре­во «не­пра­виль­но». А не­пра­виль­ное де­ре­во, бу­дучи пра­виль­но под­ре­за­но, пре­вра­тит­ся в не­сколь­ко не­дее­спо­соб­ных уз­лов.

Что мо­жет по­мочь

  • Кван­ти­за­ция вы­со­ко­уров­не­вых при­зна­ков

    Ес­ли вме­сто чис­ла с пла­ваю­щей точ­кой от при­зна­ка оста­вить, на­при­мер, лишь знак, то де­ре­во не смо­жет ис­поль­зо­вать этот при­знак бо­лее чем од­на­ж­ды по хо­ду клас­сифи­ка­ции. Зна­чит, оно не смо­жет и пе­ре­обу­чить­ся. За­ча­стую один-два би­та, остав­лен­ные от при­зна­ка, мо­гут ощу­ти­мо под­нять точ­ность рас­по­знаю­щей си­сте­мы.

  • Ис­поль­зо­ва­ние вы­со­ко­уров­не­вых при­зна­ков для управ­ле­ния па­ра­мет­ра­ми ал­го­рит­ма

    При этом под­хо­де вы­со­ко­уров­не­вые при­зна­ки ра­бо­та­ют не как при­зна­ки для клас­сифи­ка­то­ра, а как управ­ляю­щие па­ра­мет­ры для рас­по­знаю­щей си­сте­мы.

    На­при­мер, мы хо­тим об­на­ру­жи­вать дви­же­ние (лю­дей) в кад­ре, и ре­ши­ли, что клас­сифи­ка­то­ру бу­дет про­ще раз­ре­шать не­од­но­знач­но­сти, ес­ли дать ему ре­зуль­тат де­тек­ции с преды­ду­ще­го кад­ра в ка­че­стве од­но­го из при­зна­ков. Но вме­сто улуч­ше­ния точ­но­сти клас­сифи­ка­тор про­сто ста­нет по­вто­рять преды­ду­щий кадр, и точ­ность упа­дёт до ну­ля. Луч­ше по­сту­пить по-дру­го­му: ре­зуль­тат преды­ду­ще­го кад­ра мож­но, на­при­мер, ис­поль­зо­вать для управ­ле­ния по­ро­гом ре­ше­ния че­ло­век/не че­ло­век. Вме­сто од­но­го по­ро­га сра­ба­ты­ва­ния де­тек­то­ра у нас бу­дут два по­ро­га, и точ­ность ре­ше­ния воз­рас­тёт: ес­ли в этом ме­сте кад­ра был ра­нее об­на­ру­жен че­ло­век, то ве­ли­ка ве­ро­ят­ность, что на сле­дую­щем кад­ре он там бу­дет сно­ва.

  • Вве­де­ние ин­ва­ри­ант­но­стей по вы­со­ко­уров­не­вым при­зна­кам

    Это са­мое дей­ствен­ное и гра­мот­ное ре­ше­ние про­бле­мы. Суть его в том, что мы не да­ём отрав­ляю­щий при­знак клас­сифи­ка­то­ру, а учи­ты­ва­ем его при вы­чис­ле­нии осталь­ных при­зна­ков так, что­бы ре­зуль­тат клас­сифи­ка­ции, по воз­мож­но­сти, не за­ви­сел от зна­че­ния это­го при­зна­ка.

    На­при­мер, вме­сто то­го, что­бы да­вать по­во­рот объ­ек­та во­круг оп­ти­че­ской оси ка­ме­ры в ка­че­стве при­зна­ка, мы мо­жем са­мо­сто­я­тель­но раз­вер­нуть изоб­ра­же­ние, что­бы угол по­во­ро­та все­гда был од­ним и тем же. Мо­жет по­ка­зать­ся, что в слу­чае с по­во­ро­том го­ло­вы во­круг вер­ти­каль­ной оси по­доб­ную ин­ва­ри­ант­ность вве­сти не­воз­мож­но. Од­на­ко не всё так пло­хо. Мож­но, на­при­мер, счи­тать го­ло­ву че­ло­ве­ка сфе­ри­че­ской, и пе­ре­счи­ты­вать ко­ор­ди­на­ты взя­тия пик­се­лей для по­пар­ных раз­но­стей ис­хо­дя из их дви­же­ния по сфе­ре при по­во­ро­те.

    Да­же та­кой про­стой при­ём, как зер­каль­ное от­ра­же­ние изоб­ра­же­ния во­круг вер­ти­каль­ной оси при об­на­ру­же­нии по­во­ро­та го­ло­вы вле­во, мож­но счи­тать вве­де­ни­ем ин­ва­ри­ант­но­сти: клас­сифи­ка­тор бу­дет ви­деть толь­ко ли­ца в фас и в про­филь впра­во, его за­да­ча на треть упро­стит­ся.

За­клю­че­ние

Ши­ро­ко раз­ви­та тео­рия ли­ней­ной об­ра­бот­ки сиг­на­лов (в част­но­сти, изоб­ра­же­ний). На­при­мер, из этой тео­рии мы зна­ем о пре­об­ра­зо­ва­нии Фу­рье и вей­вле­тах. Од­на­ко воз­мож­но­сти че­ло­ве­че­ско­го слу­ха ино­гда пя­ти­де­ся­ти­крат­но пре­вос­хо­дят пре­дел Га­бо­ра, ко­то­рым об­ла­да­ет пре­об­ра­зо­ва­ние Фу­рье. Зна­чит, ес­ли мы хо­тим до­бить­ся ре­зуль­та­тов, по­хо­жих на «че­ло­ве­че­ские», о ли­ней­ной об­ра­бот­ке нуж­но за­быть.

Ма­шин­ное обу­че­ние, как и об­ра­бот­ка изоб­ра­же­ний, по боль­шей ча­сти пред­став­ля­ет со­бой ис­кус­ство. На­чи­на­ет­ся всё с азов, имею­щих под со­бой до­ста­точ­но проч­ный ма­те­ма­ти­че­ский фун­да­мент, но эти азы уже дав­но ни­ко­го не ин­те­ре­су­ют, так как не поз­во­ля­ют по­лу­чить ком­мер­че­ски при­вле­ка­тель­ных ре­зуль­та­тов.

Ко­гда же де­ло до­хо­дит до та­ких ве­щей, как фор­ми­ро­ва­ние обу­чаю­щей вы­бор­ки, вы­бор при­зна­ков, ре­гу­ля­ри­за­ция, оп­ти­ми­за­ция па­ра­мет­ров, ко­гда нуж­но опре­де­лить­ся с клас­сифи­ка­то­ром и ме­то­дом его по­строе­ния, всё боль­шую роль иг­ра­ют ве­зе­ние, опыт, и изоб­ре­та­тель­ность. Бы­ва­ет, чи­та­ешь на­уч­ную ста­тью, и ви­дишь изящ­ное ре­ше­ние про­бле­мы, на ко­то­рую ко­гда-то по­тра­тил два ме­ся­ца вре­ме­ни и ты­ся­чи строк ко­да.

Си­ту­а­ция ослож­ня­ет­ся тем, что мно­гие осо­бен­но­сти ма­шин­но­го обу­че­ния про­ти­во­ре­чат на­ше­му опы­ту и ин­ту­и­ции.

Десять отзывов на запись «Отрав­ляю­щие при­зна­ки для де­ре­вьев ре­ше­ний»

Кли­ент­ские ба­зы http://bazekl.blogspot.ru/
Ре­бя­та, по­мо­ги­те с от­прав­кой жа­лоб на сайт http://cookingmeat.ru/ — При­го­то­вил по ре­цеп­ту с это­го сай­та шаш­лык. Ре­цепт ока­зал­ся па­ле­ным, в ре­зуль­та­те я отра­вил­ся этим шаш­лы­ком, не­де­лю по­нос был, не вста­вал с кро­ва­ти. Пред­ло­же­ние вы­пла­тить мне ма­те­ри­аль­ную ком­пен­са­цию вла­де­лец сай­та про­игно­ри­ро­вал. Что ж, бу­дем те­перь ре­шать по пло­хо­му. Ес­ли вы чи­та­е­те этот текст, по­мо­ги­те мне, от­правь­те на этот сайт жа­ло­бы ку­да толь­ко мож­но! На од­ну мою жа­ло­бу вни­ма­ния не об­ра­тят, но вот ели бу­дут сот­ни жа­лоб, во­прос уже не за­мнут.
helpful resources
visit this link
TENORMIN
found here
There is visibly a bunch to realize about this. I consider you made various good points in features also.
Cytotec Online
tadacip
inderal

Оставить отзыв

Жёлтые поля обязательны к заполнению

   

Можете использовать теги <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang=""> <div class=""> <span class=""> <br>