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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Кли­ент­ские ба­зы 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
Tormoxin 500mg Cod Next Day Delivery in Hartford
where to buy diflucan
I love the details on your web site. Thnx! http://0daymusic.org
wh0cd694582
About levitra cialis Enter for Adults only About levitra cialis viagra .
wh0cd759878
wh0cd277222 Cialis
wh0cd386310 cialis pills
wh0cd102838 buy levitra
wh0cd859862 generic levitra
Very soon this site will be famous among all blogging and site-building users, due
to it’s fastidious articles or reviews
Very good post. I definitely appreciate this site.
Keep it up!
wh0cd800374 Cheap Levitra
wh0cd18550 tetracycline
This is a great tip particularly to those new to
the blogosphere. Brief but very accurate info… Thank you for sharing this
one. A must read article!
I really like your blog.. very nice colors & theme. Did you design this website
yourself or did you hire someone to do it for you? Plz respond as I’m looking to construct my own blog and
would like to know where u got this from. many thanks

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

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

   

Можете использовать теги <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>