0XVLNVNDSDQGHJHQRP *HQHWLVN 3URJUDPPHULQJ



Relevanta dokument
GENETISK PROGRAMMERAD MUSIK OCH

Genetiskt Programmerad Musik

Föreläsning 3.1: Datastrukturer, en översikt

Utvärdering av föräldrakurs hösten 2013

Det musikaliska hantverket

Öppen data och vad vi kan vinna på att offentliggöra uppgifter! Formatdag i västerås Björn Hagström bjorn.

Planeringsspelets mysterier, del 1

Slutrapport för Pacman

Concept Selection Chaper 7

Grundläggande Idéer Algoritmens komponenter Numerisk optimering Genetisk Programmering. Genetiska Algoritmer

Tre misstag som äter upp din tid och hur du enkelt gör någonting åt dem. Innehåll. Misstag #1: Önskelistan Misstag #2: Parkinsons lag...

Digitalt lärande och programmering i klassrummet

Ovanliga Tips till ett Smalare Liv av Seif Fendukly Alla rättigheter förbehålls.

Hur mäts kunskap bäst? examinationen som inlärningsmoment

Självkänsla. Här beskriver jag skillnaden på några begrepp som ofta blandas ihop.

Hitta kunder som frilansare

Att ge feedback. Detta är ett verktyg för dig som:

1DV433 HT13. I vilken utsträckning har kursens innehåll och uppläggning gett förutsättningar för att du ska ha uppnått respektive lärandemål?

OM KRITERIER av Emelie Johnson Vegh och Eva Bertilsson, publicerad i Canis 2004

En rapport om villkor för bemannings anställda

Föreläsning 4: Poster

Peter Ottosson 31/ Introduktionskurs i datateknik II1310

Skriftlig kommunikation. Att väcka och behålla läsarnas intresse

Liten introduktion till akademiskt arbete

NATURVETENSKAP FÖR LIVET?

Sammanställning över enkätsvar från föräldrar till förskolebarn i Nynäshamns kommun, 2016.

Recept för rörelse. TEXT Johan Pihlblad. Lena Kallings är medicine doktor och landets främsta expert på fysisk aktivitet på recept.

LYRICUS SAMTAL NR. 1. Att uppleva Helhetens Navigatör

Verktyg för Achievers

ANONYMA TENTAMINA (FÖRDELAR) ÅSIKTSTORG:

Studien. Teknik. Akustik. Enkätundersökning. En kvalitativ, explorativ studie av ett case. Bestående av tre delar:

En nybörjarkurs i kritiskt tänkande

Att skriva Hur utformar man en Social berättelse? Lathund för hur en Social berättelse kan skrivas

Storyline Familjen Bilgren

1. Att lyssna 1. Titta på den som talar. 2. Tänk på vad som sagts. 3. Vänta på min tur att prata. 4. Säg det jag vill säga. 1.

6-stegsguide för hur du tänker positivt och förblir positiv.

Real-time requirements for online games

Utvärdering 2015 deltagare Voice Camp

Brott, straff och normer 3

NATURVETENSKAP FÖR LIVET?

Just nu pågår flera satsningar för att förbättra svenska elevers måluppfyllelse

Matematik 92MA41 (15hp) Vladimir Tkatjev

VIDEODAGBOKEN. Individuellt Mjukvaruutvecklingsprojekt. En dagbok i videoform online. Robert Forsgren (rf222ce) UD

Det första steget blir att titta i Svensk MeSH för att se om vi kan hitta några bra engelska termer att ha med oss på sökresan.

ditt kommande år

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

Provivus tips om KONCENTRATION - VAD PEDAGOGEN KAN GÖRA

Artificiell Musik? AI som kompositör

Hur definieras ett jämställt samhälle? (vad krävs för att nå dit? På vilket sätt har vi ett jämställt/ojämställt samhälle?)

Hur kommer man igång?

UMEÅ UNIVERSITET 26 april 2002 Instutionen för datavetenskap. Grafproblem. Laboration 4, Datastrukturer och Algoritmer VT02

Programmering av stegmotorer ett miniprojekt i samarbete med Svensk Maskinprovning

Att komma utanför en storstad ger ro för att fokusera och samla gruppen.

Träningspaket Sälenfjällen 2014

Hej läsare. Jämför en vanlig gymnisse med en olympisk styrkelyftare. Hur kan styrkelyftaren lyfta sådana enorma mängder mer? Är hans muskler magiska?

Slutrapport YUNSIT.se Portfolio/blogg

NXT LEGO-robot laboration Programmering och felsökning av en LEGOrobot

Kristet Sällskapande Stefan Forsbäck 2007

Tärna Folkhögskola IT-pedagogutbildningen Individuellt fördjupningsarbete Vt IT I FÖRSKOLAN. Författare:Tove Andersson

Roligaste Sommarjobbet 2014

Copyright 2007 Human Excellence, all rights reserved

Enkätsvar Fler kvinnor. Enkätsvar 2013 Kyrkans Familjerådgivning Stockholm

LEGO Mindstorm-robot

Grunderna i stegkodsprogrammering

Inför föreställningen

hh.se/studentsupport goda råd för en hållbar studietid Studentsupport

Positiv Ridning Systemet Arbetar min häst korrekt? Av Henrik Johansen

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

1. (första söndagen i månaden: arbetsmöte) Anonyma Sexmissbrukares Stockholmsmöte söndagar , Hartwickska huset, St Paulsgatan 39.

Tentamen: Programutveckling ht 2015

Genetiska algoritmer. Henrik Hansson Rapport, CDT212 Mälardalens Högskola

Integrering av formgivningsprocessen i en produktutvecklingsprocess

SkövdeNät Nöjd Kund Analys

kapitel 4 en annan värld

Föreläsning 6: Introduktion av listor

Välkommen till Övertygande Kommunikation

ETT ÅR MED DIN TRÄNING

Genetisk programmering i Othello

Studio Ett den 12 december: Svensk film med svensk textning

Fortsättningskurs i programmering F 2. Algoritmer i Programutveckling Hugo Quisbert Problemexempel 1

Att överbrygga den digitala klyftan

I PRAKTIKEN» Teamet i fokus

1. Bekräftelsebehov eller självacceptans

GYMKEEPER ANDREAS SÖDERSTRÖM

============================================================================

Brukarenkät IFO Kvalitetsrapport 2011:01 KVALITETSRAPPORT

Efter att ha arbetat med det här kapitlet bör du

Åtgärdsprogram och lärares synsätt

Språkäventyret. Mål. Verktyg. Inledande arbete

Djuretik. Vetenskap, politik, strategi. moralfrågan. Indirekta vs direkta skäl

ÖKA DIN SOCIALA KOMPETENS. På en timme

PiteåPanelen. Rapport 8. Vinterväghållning. April Anna Lena Pogulis Kommunledningskontoret

Ledarskap Utbildning & bildning Matematik

Låtskrivarboken. Monica Welander. Hands Up Music. Innehåll:

Kursutvärdering. Samhällskunskap A

VIMENTIS VIP. FÖR STARTUPS & SMÅFÖRETAGARE Med hjälp utav Vimentis VIP kommer en helt ny värld att öppnas upp för dig som företagare.

Finns det en skillnad mellan vad barn tror sig om att klara jämfört med vad de faktiskt klarar?

ÄMNESPLANENS STRUKTUR. Progressionstabellen

Tvärtom Hur du vinner framgång, blir lycklig och rik genom att göra precis tvärtom

Att fånga bedömningar i flykten

Transkript:

0XVLNVNDSDQGHJHQRP *HQHWLVN 3URJUDPPHULQJ ) UGMXSQLQJVDUEHWHL$,

0XVLNVNDSDQGHRFK*HQHWLVN3URJUDPPHULQJ 6DPPDQIDWWQLQJ I detta arbete har jag valt att undersöka hur musik kan skapas genom ett system grundat på Genetisk Programmering (GP). GP tillhör grenen maskininlärning inom AI och är skulle man kunna säga, en datoriserad metafor av evolutionsförloppet. Samma tankar som återfinns i Darwins teorier hittar sin plats även i GP. Jag har i mitt arbete framförallt tittat på ett system baserat på GP där musik genereras. Namnet på systemet är GP-Music och skapades vid ett projektsammarbete mellan Brad Johanson från Stanford University och Riccardo Poli från University of Birmingham. Musiken representeras som toner i skalan och ett antal funktioner att applicera på dessa. Resultatet av att sätta ihop dessa blir en enstämmig musikslinga som ska förbättras över generationerna. Johanson & Poli är utifrån resultatet av deras system nöjda med att ha visat att det med enkla medel går att skapa unik relativt bra musik men lägger till att mycket forskning finns att göra för att utveckla och förbättra systemet. Själv tycker jag inte resultaten är speciellt överväldigande även om det finns intressanta inslag i deras system som är värda att titta närmare och jobba vidare på.

,QOHGQLQJ (författaren) (läsaren) (författaren) (läsaren) - Kan en dator generera bra musik på egen hand? - Det kan den väl antar jag, eftersom du frågar. - Ja, där har du kanske rätt, men vet du i så fall hur detta kan gå till? - Nej, där satte du mig på pottkanten, men nu är mitt intresse väckt! Denna korta inledningsdialog får sammanfatta det jag valt att titta på i mitt fördjupningsarbete. En direkt reaktion på ovanstående dialog kanske är vad som egentligen menas med bra musik. Detta är självklart en fråga om subjektiv bedömning eftersom musik handlar om personlig smak. Detta kommer också vara av betydelse ska vi se senare i rapporten. Innan vi fortsätter vill jag bara kort nämna varför jag valt detta ämne. Jag är själv väldigt intresserad av musik och har skapat musik med hjälp av datorer sedan början av nittiotalet. När intresset för AI nu klampat in under kursen som gått så känns det därför extra kul att kunna titta på vad dessa till synes vitt skilda områden kan erbjuda en när de möts. För att hitta svaret på frågorna i dialogen har jag valt att koncentrera mitt arbete på ett musikgenererande system kallat GP-Music. Systemet är baserat på en gren av AI som heter Genetisk Programmering (GP). Därför kommer jag innan jag kastar mig över själva systemet ge en kort introduktion till GP. Därefter görs en djupdykning in i hur själva systemet arbetar och vilka resultat det gett och sist kommer några egna tankar, både kring GP-Music och hur forskningsområdet i stort kan användas.

(Q YHUEOLFN YHU*3 Mycket av informationen i detta avsnitt är hämtad ur boken Genetic Programming $Q,QWURGXFWLRQ skriven av Banzhaf, Nordin, Keller och Francome 1998 vilka i sin tur grundar just detta parti, om hur ett grundläggande GP-system fungerar, mycket på John R. Kozas direktiv för hur ett sådant grundläggande GP-system kan fungera. Denne John R. Koza är en stor förgrundsfigur inom GP och leder en stor del av forskningen i området framåt genom sitt arbete vid Stanford University och han driver dessutom några hemsidor där jag funnit mycket information. En del referenser nedan är alltså dessutom från olika delar av dessa hemsidor. Är det något parti som är mer direkt hämtat ur en viss källa så anger jag den referensen efter det partiet. För övrigt fick jag bra hjälp av just Koza via en e-post konversation där han tipsade om var jag kunde hitta relevant information vilket jag tycker visar på att allt möjligt intresse och arbete i området välkomnas varmt. %DNJUXQG GP tillhör en gren inom AI som kallas maskininlärning (ML). Tanken med MLsystem är att en dator automatiskt ska kunna lära sig ett problem utan att vi ger den explicita instruktioner för hur det ska gå till (Genetic Programming: Banzhaf, Nordin, Keller, Francome, 1998). Detta är också utgångspunkten för GP vars karaktäristiska är ett det grundar sitt system på den biologiska vetenskapen och framförallt det evolutionistiska synsättet. GP är nämligen en metafor på detta evolutionistiska förlopp där termer som individkorsning, populationer, och mutation följer med in i GP:s värld. En fördel med GP jämfört med andra ML-metoder är att det kan använda sig av alla tänkbara program och funktioner som hittills skapats av programmerare då den arbetar genom vanlig programmering till datorn (Seven Differences Between Genetic Programming and Other Approaches to Machine Learning and Artificial Intelligence: http://www.genetic-programming.com/sevendiffs.html). Dessutom innefattar den genom denna egenskap i förlängningen alla andra ML-metoder då dessa kan beskrivas i program (Genetic Programming: Banzhaf, Nordin, Keller, Francome, 1998). I stora drag fungerar en grundläggande GP-algoritm så att en population skapas efter vissa förutbestämda riktlinjer och när detta är gjort väljs de individer, som verkar bäst lämpade för att lösa problemet, till att genomgå genetiska operationer och efter detta slungas de sedan in i nästa generation. Denna generation genomgår sedan samma procedur igen och så fortsätter det tills man är nöjd med de individer man fått fram. Nyckeln till att systemet lär sig är att bättre och bättre individer tas fram och förs vidare genom urvalet. Vi ska dock lite mer ingående se hur detta går till.

1nJUDJUXQGOlJJDQGHI UEHUHGHOVHU När man tar sig an ett problem genom GP gäller det först att definiera vilka funktioner och värden som behöver finnas med för att GP ska kunna lösa problemet. I GP talar man om funktioner och terminaler där funktioner är alla tänkbara sorters funktioner som kan appliceras på ett värde och där terminaler är det indatavärde som funktionerna börjar operera på. Till exempel innehåller (1 + 2) * x funktionerna + och * och terminalerna 1, 2 och x. När man definierat sina terminaler och funktioner kan man i stort sett redan initiera en första population av individer där varje individ är ett program bestående av x och y antal funktioner och terminaler. Det man bör fundera på är vilken struktur man vill att en individ ska ha. Det kanske mest gängse sättet inom GP idag är trädstrukturen men man kan också välja att representera en individ linjärt eller grafiskt. Respektive metod har olika fördelar och man bör undersöka vad som verkar passa det problem man vill lösa. Man ska sen också ta ställning till hur man genererar individerna i sin första population vilket bör ske genom någon form av utrandomisering av sina funktioner och terminaler. Dessutom bör man sätta gränser för hur stora dessa första individer kan vara och sedan också hur stora man max vill att de ska kunna bli efterhand (i trädstrukturen, sätts ett maxdjup). Att dessa individer kan variera i storlek är en viktig egenskap som skiljer GP från många andra ML-metoder och gör att den lättare kan hantera problem där lösningen kan variera i storlek. Vi börjar nu, genom dessa storlekar, komma in på vad som brukar kallas parametrarna inom GP (Example of a Run of Genetic Programming http://www.genetic-programming.com/gpquadraticexample.html). Utöver maxstorleken på individerna är andra parametrar att sätta vilka genetiska operatorer man använder sig av, hur stor sannolikhet det är att en viss operations ska utföras på en individ, samt hur många individer varje generation ska innehålla och hur många generationer man kör över. Allt bör analyseras och undersökas i förväg då dessa parametrar är av betydande vikt för att uppnå ett bra resultat. Vanliga genetiska operatorer är kopiering, mutation och korsning där kopiering innebär en fördubbling av en individ, mutation att en del av programmet ersätts med en helt ny del, och korsning att två individer kapas någonstans och byter ut var sin del. En stor del av förberedelserna ligger i att komma på vilken fitnessfunktion man ska använda, det vill säga hur man ska avgöra hur nära en individ är det önskade resultatet. Detta kan vara en matematisk funktion men också någon helt annan metod. Fitnessfunktionen är kanske den mest specifika delen i ett GP-system och kanske därför också den svagaste punkten eftersom många intressanta problem är komplexa. Det är samtidigt absolut nödvändigt att en väl fungerande fitnessfunktion hittas för att kunna få en bra utveckling i sitt GP-system. När detta är gjort och individerna i en generation väl genomgått en bedömning genom fitnessfunktionen så har de olika stor sannolikhet att få väljas till de genetiska operatorerna. Det finns olika metoder hur själva urvalet går till. En sådan är tournament selection där ett visst antal slumpvalda individer får mötas varpå segraren i varje turnering slussas vidare.

När allt detta jobb är utfört är det dags att implementera sin algoritm i programkod så att ens val efterföljs och sedan är det bara till att köra och utvärdera och ändra sina inställningar och sin kod om det behövs. Vi ska nu se hur det system jag fördjupat mig i fungerar.

*30XVLF GP-Music är ett musikgenererande system baserat på genetisk programmering. Systemet utvecklades genom ett samarbete mellan Brad Johanson från Stanford University och Riccardo Poli från University of Birmingham. Systemet genererar ett stycke kod som kan översättas till en enstämmig melodislinga. Detta utförs genom användningen av en ganska grundläggande GP-algoritm men med några små finesser. Vi ska nu se mer exakt hur denna har implementerats till ett färdigt musikgenererande system. Där inget annat sägs är det jag som tar mig friheten att spekulera i vilka problem som finns med att skapa ett musikgenererande GP-system men allt som har med själva systemet GP-Music att göra är hämtat ur Johanson & Poli:s rapport GP- Music: An interactive Genetic Programming System for Music Generation with Automated Fitness Raters. 5HSUHVHQWDWLRQ Det första problemet att ta hänsyn till är hur musiken ska representeras i systemet. Det hela blir en avvägning över vad man vill ska vara av betydelse. Vill man ha med mycket av informationen som finns i ett musikflöde skulle man kunna använda sig av ljudvågformen som ett musikflöde generar. Problemet med den är att det är så mycket information inlagrad att variabler som, ljud (flöjt, piano), melodier, harmonier, styrkan på dessa, eko, rymdklang med flera, troligtvis blir svåra att tolka och hantera i ett GP-system. Svårigheten ligger i att välja funktioner och terminaler för skapandet av den komplexa vågformen. Ett mycket mindre komplext sätt att representera musiken är att begränsa sig till vilka toner som ingår och när dessa spelas. Fördelen är att det nu är lättare att översätta ett sådant tonsystem så att ett GP-system kan använda sig av datan. Precis så är också tanken i GP-Music där Johanson & Poli valt att representera musik genom dessa toner samt ett antal funktioner att applicera på tonerna för att de ska spelas på ett visst sätt. Detta utgör då funktionerna och terminalerna till GP-systemet (se tabellen). Function Set: play_two, add_space, play_twice, shift_up, shift_down, mirror, play_and_mirror Terminal Set: Notes: C-4, C#4, D-4, D#4, E-4, F-4, F#4, G-4, G#4, A-5, A#5, B-5 Pseudo- Chords: C-Chord, D-Chord, E- Chord, F-Chord, G- Chord, A-Chord, B-Chord Other: RST 7DEHOOHQYLVDUIXQNWLRQHUQDRFKWHUPLQDOHUQDL*3PXVLF-RKDQVRQ3ROL

En närmare titt på detta visar att tonerna representeras av typen C-4 där C är vilken ton i skalan den är och 4 i vilken oktav den ligger. Dessutom finns det pseudoackord som är tre toner i ett ackord spelandes sekvensiellt efter varandra. Den sista terminalen (RST) är en paus och läggs in om ingen ton ska ljuda vid tillfället. Funktionerna som används gör följande: Play_two tar två sekvenser av noter och sätter ihop de till en sekvens (behövs för att spela mer en not). Add_space tar en sekvens och lägger till paus efter varje ton i sekvensen vilket saktar ner tempot. Play_twice tar en sekvens och spelar denna två gånger efter varandra. Shift_up tar en sekvens och höjer alla toner inom denna ett steg. Shift_down samma som ovan fast ner ett steg. Mirror tar en sekvens och spelar den baklänges. Play-_and_mirror tar en sekvens och reverserar den som i föregående funktion men lägger till det reverserade efter originalet så att först den ursprungliga sekvensen spelas varpå den spelas baklänges. Någon närmare förklaring till varför just dessa funktioner valts nämns inte mer än att play_two är till för att göra längre sekvenser än en not och de andra för att få en viss grad av strukturerade sekvenser. Ett annat val Johanson & Poli gör är att endast ha en sekvensiell melodislinga, det vill säga utesluta att flera toner spelas samtidigt, även detta för att minska komplexiteten. Här finns alltså flera möjligheter till vidare experimenterande för att uppnå nya dimensioner i musikgenereringen. Med dessa funktioner och terminaler definierade kan nu program skapas för att få fram en melodislinga. Dessa program representeras i Johanson & Polis system som LISP-liknande strukturer vilket gör det naturligt att se programmet ur ett trädperspektiv. Av exemplena från deras system att döma så har de använt sig av grow metoden för att genererar dessa programträd vilket innebär att varje gren kan variera i längd men avslutas så fort en terminal dykt upp (Genetic Programming: Banzhaf, Nordin, Keller, Francome, 1998). (shift-down (add-space (play-and-mirror (play-two (play-two (play-two (play-two B-5 B-5) (shift-down A-5)) (shift-down A-5)) F-4)))) %LOGHQI UHVWlOOHUHQUHSUHVHQWDWLRQDYHWWSURJUDPLHQ/,63OLNQDQGHVWUXNWXU

%LOGHQI UHVWlOOHUHQWUlGVWUXNWXU YHUHWWSURJUDPVRPJHQHUHUDUHQPXVLNVHNYHQV )LWQHVVIXQNWLRQHQ Nästa steg i förberedandet är att bestämma en fitnessfunktion så att en bedömning kan utföras över vilken sannolikhet en individ ska få för att utsättas för de genetiska operatorerna. Musikbedömning är ett ypperligt exempel på när matematiska fitnessfunktioner inte räcker till för att utföra en bedömning. Hur skulle man med en matematisk funktion kunna säga att ett stycke är bättre än ett annat? Detta problem speglar GP:s akilleshäl, i verkligheten är problemen ofta komplexa och av annan karaktär än enbart matematiska och då blir det genast en större utmaning att finna en passande fitnessfunktion. Detta diskuterar också Johanson & Poli och deras lösning på problemet är att låta en människa vara fitnessfunktionen och utföra en bedömning och ranking av varje genererad musikslinga. För detta ändamål skapas ett user interface där användaren kan välja mellan alla individer i en generation och sätta betyg på en skala mellan 1-100 i hur bra melodin är. Kravet är att alla individer ska vara betygsatta innan arbetet med en generation är klart men under den tiden får användaren gå tillbaka och lyssna på redan betygsatta individer för att kunna jämföra och göra en så rättvis bedömning som möjligt. På så sätt fungerar bedömningen inom en genaration bra och för att uppnå en rättvis bedömning över generationerna så låter de individer som skickats över till nästa

generation få behålla sitt värde så att användaren kan luta sig tillbaka mot dessa när den bedömer nästa generation. Ett problem Johanson & Poli tar upp är att ta hänsyn till att GP:s natur som maskininlärningssystem gör att olika långa sekvenser skapas, vilket i och för sig är önskvärt då man vill att längden ska kunna variera, men där alltför korta eller långa sekvenser bör tas bort för att få en mer homogen grupp att bedöma och för att öka effektiviteten med tanke på tidsåtgången för en person. Detta är gränser som går att laborera med efter önskemål. Ett problem med själva fitnessfunktionen som tas upp är att, eftersom musiksbedömning är subjektiv och personlig, så bör endast en person göra bedömningen av alla melodier för att få ett enhetligt resultat och då blir arbetet väldigt tids- och tålamodskrävande. Detta begränsar då hur många individer varje population får innehålla, hur många generationer som kan köras, samt hur långa musikslingorna kan vara (vilket styrs av satt maxdjup på trädet). I förlängningen gör det att man inte hinner få ett så kraftfullt GP-system som man kanske vill. 1HXUDOWQlWVRPDXWRPDWLVNUDQNLQJ En lösningsidé till det sistnämnda problemet som Johanson och Poli använder sig av hämtas ur ett annat område inom AI och maskininlärning, nämligen neurala nät. Tanken är att skapa och träna sådana genom backpropagation för att sedan ta över bedömningen av melodislingorna. Kan man få fram ett väl fungerande nät skulle man plötsligt kunna öka alla de faktorer som begränsas av att en person måste göra bedömningen. Intressant, och problematiskt, är att man inte kan använda ett och samma nät till alla exempel eftersom de olika långa sekvenserna gör att indatalagret varierar. För att bemästra detta så används här en teknik där vissa vikter delas mellan de olika neurala näten och sedan justeras efterhand så att de passar alla nät. På det sättet kan sedan de olika NN ge en rättvis bedömning. Sammanlagt består nätet som de använder av ett indatalager, tre dolda, och ett utdatalager (se bilden). 'HWQHXUDODQlWHWXUHWWODJHUSHUVSHNWLY

Som utdata ur nätet är det en nod som får ett värde mellan 0 och 1 och som sedan multipliceras med 100 för att få ett värde på skalan 1-100. När nätet tränas så börjar det enligt backpropagation ifrån utdatanoden och tar felet där och börjar justera vikterna bakåt i lagren tills det når indatalagret (Artificial Intelligence A Modern Approach: Russel, Norvig 2003) samtidigt som det alltså håller koll på de delade vikterna så att dessa justeras även med hänsyn till de andra näten. Jag har själv inte förstått helt exakt hur denna viktdelningsteknik fungerar och går inte in mer i detalj på den här men det låter samtidigt rimligt så jag nöjer mig med att acceptera att det kan fungera så länge. Vi ska dock senare i körningarna se hur bra Johanson & Poli får det hela att fungera. 3DUDPHWUDU Ett sista steg innan körningar kan börja utföras är att fastställa de grundläggande parametrarna för körningarna och Johanson & Poli väljer att följa rekommendationer från Koza för att sätta dessa. Tournament selection används för att utse vilka individer som hamnar i nästa generation och hos dessa utses 70 % av individerna för korsning, 15 % för kopiering och 15 % för mutation. Antal generationer är satt till sex där varje generation innehåller sexton individer. Slutligen är det maximala djupet satt till sex nivåer, vilket dock ändras senare under körningarna. 5HVXOWDWIUnQROLNDN UQLQJDU Från början så kontrolleras systemet så att det även fungerar i praktiken och för detta ändamål används bara toner inom en oktav, inga pseudoackord och endast funktionerna play_two och add_space. Resultatet som de får fram är enligt de själva ganska ostrukturerade melodier som ofta låter rätt illa även om det efter en tre till fyra generationer börjar arta sig hyfsat vad gäller toner i melodin. Systemet har dock åtminstone visat att det fungerar så det är därför naturligt att fortsätta att lägga till även de andra funktionerna för att få mer struktur i melodierna. Tabellen nedan visar just resultatet av en sådan körning och den bästa individ som skapades i denna. Enligt Johanson & Poli blir det nu också mer struktur på melodierna och en jämnare nivå bland individerna även om de bästa tenderar att påminna mycket om varandra. Gen. Nodes Depth Seq. Len. Fitness 3/5 21 8 21 25.00 Program Tree: (play-two (play-and-mirror B-5) (mirror (play-two (shift-up (playtwo (mirror G-4) (play-and-mirror D-4))) (play-twice (play-two (play-twice F#4) (play-twice (play-two (shift-down A-5) (add-space F#4)))))))) 7DEHOOHQYLVDUGHQElVWDLQGLYLGHQLGHQDQGUDN UQLQJHQGlUDOODIXQNWLRQHUODJWVWLOO Inför nästa körning så begränsas tonerna till C-dur skalan och pseudoackorden läggs till terminalen för att man sedan innan vet att dessa genererar behagliga sekvenser att lyssna till. Nu blir också nästan alla individer överlag trevliga att lyssna till även om de låter mer och mer lika då de nu förlitar sig på pseudoackorden i stor utsträckning.

Gen. Nodes Depth Seq. Len. Fitness 4/5 15 8 60 22.75 Program Tree: (play-and-mirror (shift-down (play-two (play-and-mirror (shiftdown (play-two (shift-up (add-space A-Chord)) (shift-up (addspace A-Chord))))) (shift-up (add-space A-Chord))))) 7DEHOOHQYLVDUElVWDLQGLYLGHQGlUSVHXGRDFNRUGHQODJWVWLOO6RPV\QHVVnDQYlQGHUGHQVLJEDUD DYHWW$GXUDFNRUG Efter att ha känt på hur systemet fungerar så vill nu Johanson & Poli skapa förutsättningar för att träna sitt neurala nätverk och därför genomför de en extra stor körning där de låter systemet jobba över tio generationer med tjugo individer i varje population. Maxdjupet sätts till tolv och till att lyssna och bedöma samtliga sätts en erfaren musiklärare. Sammanlagt utförs en bedömning och ranking av tvåhundra individer som sedan utgör grunden till träningen och testet av det neurala nätet. Den bästa individen de nu får fram anser de hålla den högsta klassen av de dittills genererade musikslingorna, den är nu både längre och mer originell men fortfarande harmonisk. Gen. Nodes Depth Seq. Len. Fitness 9/9 24 9 120 46.00 Program Tree: (play-twice (play-two (add-space (shift-up (play-two (play-twice (play-and-mirror (shift-down (shift-up D-Chord)))) (play-two (playtwice G-Chord) (mirror F-Chord))))) (play-and-mirror (shift-down (shift-up (play-two (play-twice G-Chord) (mirror F-Chord))))))) 'HQElVWDLQGLYLGHQIUnQN UQLQJDUQDPHGPlQVNOLJILWQHVVIXQNWLRQVSnUSn&'Q Efter att ha fått fram ett nät med relativt bra felmarginaler tränat på hundra exempel, är det dags att testa den automatiska rankaren på GP-Music. Först används samma parametrar som vid framplockningen av träningsexemplen och sedan utökas antal generationer till femtio som körs med både hundra respektive femhundra individer för att testa kapaciteten. Resultatet från de bästa individerna ur respektive körning syns nedan. Gen. Nodes Depth Seq. Len. Fitness 7/9 35 12 118 45.38 Program Tree: (mirror (shift-up (play-two (shift-down (play-twice (play-twice (mirror (shift-up (play-two (play-and-mirror (play-and-mirror (add-space G-4))) (add-space F-Chord))))))) (shift-up (play-two (play-twice (play-twice (shift-up (play-two (play-and-mirror (play-and-mirror add-space G-4))) (add-space F-Chord))))) (shift-up (shift-down (mirror (mirror (play-twice (mirror (shift-up E2-Chord))))))))))))

(IWHUI UVWDN UQLQJHQPHGDXWRUDQNDUHQPHGVDPPDSDUDPHWUDUVRPI UHJnHQGHVSnU Gen. Nodes Depth Seq. Len. Fitness 48/50 27 11 184 57.03 Program Tree: (play-twice (mirror (play-two (add-space (add-space (add-space E2-Chord))) (play-twice (play-two (add-space E2-Chord) (play-two (add-space (play-two (add-space (mirror RST)) (play-and-mirror G1-Chord))) (mirror (mirror (play-twice (play-and-mirror (shift-down E2-Chord))))))))))) (IWHUHQN UQLQJ YHUIHPWLRLQGLYLGHUPHGKXQGUDSHUJHQHUDWLRQVSnU Gen. Nodes Depth Seq. Len. Fitness 50/50 25 12 184 43.04 Program Tree: (add-space (shift-up (shift-up (mirror (shift-up (play-two (play-twice (play-two (play-twice (play-twice (play-two E2-Chord RST))) (play-twice E2-Chord))) (mirror (play-and-mirror (add-space (play-two (mirror (addspace C2-Chord)) (play-twice (shift-up E2-Chord)))))))))))) (IWHUHQN UQLQJ YHUIHPWLRLQGLYLGHUPHGIHPKXQGUDSHUJHQHUDWLRQVSnU Deras åsikter om dessa tre bästa individer ur respektive körning är att den första låter OK men inte lika bra som motsvarande med mänsklig bedömning, den andra något sämre och den tredje återigen lite bättre men fortfarande långtifrån de individer genererade inför nätträningen. Svaret till varför musiken nu är sämre ligger kanske i utvärderingen av träning och testning av de neurala näten där resultaten verkade OK överlag men där de även kunde ana att nätverken ibland ger ifrån sig alltför allvarliga felbedömningar som verkar svåra att hitta orsaken till. 8SSKRYVPDNDUQDVXWYlUGHULQJDYV\VWHPHW Sammanfattningsvis anser sig Johanson & Poli ha visat att det går att generera korta melodier med hjälp av GP och att riktigt bra resultat tas fram då en person får agera fitnessfunktion. Samtidigt inser de problemet med tidsåtgången om man vill göra längre körningar och det var därför den automatiska rankningen i form av neurala nätverk infördes. Även om resultaten från dessa inte är fullt lika bra så finns antydningar till att detta kan vara värt att forska vidare på för att utveckla dessa automatiska bedömare ännu mer. Framförallt gäller det att bättre inse hur de delade vikterna fungerar för att optimera samstämmigheten. De föreslår också att ännu mer arbete kan läggas på utformning av terminaler och funktioner samt vad parametrarna ska sättas till. Slutligen poängterar de att datorn kommer att få en aktivare roll inom musikskapande i framtiden.

(JQDIXQGHULQJDU 0LQXWYlUGHULQJDY*30XVLF En första reaktion på systemet är att det genom valet av dess terminaler och funktioner nästan försöker tvinga fram trevliga melodier ur systemet. Som de själva kommer fram till så används pseudoackorden flitigt spelandes fram och baklänges och så vidare men då har också systemet begränsats till att förlita sig till dessa pseudoackord. Jag tycker en hel del av kreativiteten försvinner om inte systemet får agera friare. Jag inser att detta dock skulle innebära att större och längre körningar skulle behöva göras och då finns problemet med om en person ska bedöma alla individer. Syftet med GP-Music är kanske inte heller att skapa vackra melodier helt skiljda från varandra, utan verkar ha varit att börja nosa på området och se om det överhuvudtaget är möjligt att skapa bra musik på detta sätt, men det hade helt klart varit mer spännande med mer kreativ musik. Som det är nu känns det inte så fantastiskt att det skapas bra melodier när funktioner och terminaler har valts ut för att öka chansen. Ibland används fler funktioner än nödvändigt och då jobbar man sig bort ifrån målet (Genetic Programming: Banzhaf, Nordin, Keller, Francome, 1998), vilket jag tycker stämmer bra in här. Så fort man börjar fundera på vilka specialfunktioner och terminaler som borde finnas för att systemet ska kunna skapa bra musik så berövar man systemets frihet i att på egen hand komma fram till intressanta musiksekvenser som i längden blir mycket mer spännande och varierande. Jag tror också att man riskerar att spela bort mutationens roll på detta sätt då dessa mutationer så som systemet nu ser ut kommer att generera lite konstigare sekvenser gentemot vad reproduktion och korsning ger. I längden är kanske ändå mutationen just den del av de genetiska operatorerna som skapar den riktiga kreativiteten i systemet (Music ex Machina: Composing 16th-Century Counterpoint with Genetic Programming and Symbiosis: Polito, Daida, Bersano-Begey, 1997). En intressant iakttagelse att göra är att representationen av musik är väldigt avskalad och enkel i detta experiment och trots det så är ändå fitnessfunktionen svår att bemästra. Att välja människan som fitnessfunktion är kanske det ända rätta för hur skulle man med en annan funktion täcka in allt som är bra och dåligt med musik? Det hela är ju helt och hållet en smaksak, det en tycker är bra tycker någon annan är dåligt. Tar man dessutom in alla andra variabler i musiken som inte får plats i detta system kan man tänka sig att bedömningarna blir än mer subjektiva och att hitta en fitnessfunktion som inte är baserat på mänskligt tyckande blir då ännu svårare. Intressant hade dock varit om man såg några generella mönster i vad som är bra musik och vad som är dåligt. Skulle man kunna träna AI-system, till exempel neurala nät, på musik som är allmänt uppfattat som bra och få systemet att känna igen mönster i bra musik? I så fall skulle kanske sådana system kunna utgöra fitnessfunktionen och på så sätt bidra till genereringen av bra musik. En tanke som slår mig är att man skulle kunna dela upp musiken i olika byggstenar för att sedan träna olika neurala nät på respektive område. Ett som har hand om harmonier, ett om produktion och ljudkvalité, ett om melodier och så vidare. Sedan skulle alla dessa neurala nät tillsammans få utgöra fitnessfunktionen. Liknande idéer finns i et annat musikgenererande GP-system kallat Music ex Machina där visserligen inte neurala nät ingår men där musiken delas upp i olika delområden som sedan olika

agenter i systemet har hand om (Music ex Machina: Composing 16th-Century Counterpoint with Genetic Programming and Symbiosis: Polito, Daida, Bersano- Begey, 1997). Att dela upp musiken och låta olika agenter ha hand om respektive del för att sedan tillsammans sätta ihop en helhet är ett område som vore intressant att utveckla. Kastar man sig in i detta tycker jag hur som helst man bör vara medveten om hur otroligt komplex musik kan vara och hur svårt det är att säga, även för oss människor, vad det är som gör bra musik till just bra musik. Som låtskrivare och producent har jag själv stor erfarenhet från musikskapande och vet hur svårt det är att sätta fingret på vad som gjorde just den här låten till en bra låt. Ofta är det någon slags magisk helhet av faktorer som melodier, valda ljud, en viss röst och produktion. Men återigen, det kanske finns mönster vi inte själva vet om men som datorer kan hjälpa oss att hitta. Själva idén att använda ett neuralt nät som fitnessfunktion är ett mycket intressant grepp som det bör läggas ner mer forskning på för att utveckla. Skulle man få mer kunskap inom detta område och utveckla kraftfulla och väl fungerande sådana nät så skulle detta kunna appliceras inom mängder av andra områden där problemen är av liknande karaktär, väldigt subjektiva och svårbeskrivna. Som jag var inne på tidigare så är just GP:s svaghet att det är svårt att applicera GP på riktigt komplexa problem ute i verkligheten då fitnessfunktionen blir svår att hantera. Dock är det ett mastigt jobb att bita tag i dessa neurala nät för det måste igen påpekas att komplexiteten i denna representation är väldigt avskalad mot vad den kan vara. Hur skulle indatalagret till ett neuralt nät se ut om all annan information också ska få plats. Kanske som jag nämnde i föregående stycke så måste informationen delas upp i mindre delar. Med rätt metoder är kanske neurala nät tränade på mänsklig bedömning hur som helst just rätt medicin att råda bot på GP:s svaghet! Jag tycker personligen att AI blir som mest spännande när man kan använda olika metoders styrka i samma projekt. Idén med en symbios mellan de båda biologiska grenarna av AI (genetiska och neurobiologiska) är för övrigt inte något helt nytt utan har förekommit även tidigare (se t.ex Neural Network Training using Genetic Algorithms: van Rooij, Jain, Johnson, 1998). Som Johanson & Poli själva nämner finns det också mycket arbete att lägga ner på hur själva GP-algoritmen ska implementeras. Det känns som att de själva valt de grundläggande parametrarna för att kunna komma igång men utan att ha utvärderat närmare om det finns andra sätt att förbättra systemet på. Kan det vara idé med linjär eller grafisk GP? Vilka selektionsmetoder passar? Finns det andra genetiska operatorer som kan förbättra resultatet? $QYlQGQLQJDYIRUVNQLQJVRPUnGHW En fråga viktig att ställa i sammanhanget är vilken glädje man kan ha av att titta på musikskapande i GP-system. Jag har redan varit inne lite på detta i föregående avsnitt där jag talar om nyttan man skulle kunna ha av en liknande teknik för fitnessfunktionen i andra problemområden. Eftersom musik är så komplext tvingas man att skapa nya angripsvinklar vilket leder till en utveckling som kan vara till glädje även i andra domäner. En rent praktisk och kommersiell applikation som man skulle kunna utveckla utifrån liknande system som GP-Music är en hemsida där man kan tanka ner unika

ringsignaler genom användandet av ett sådant system. Jag tror folk skulle tycka en sådan applikation vore kul och kanske skulle det även väcka ett intresse för AI vilket ju aldrig kan vara fel. Slutligen vill jag bara påpeka att det finns andra AI-projekt där ute som också tittar på musik och som sista spår på CDn (spår 6 och 7) har jag lagt ett litet smakprov på vad två forskare på Chalmers, Mats Nordahl och Palle Dahlstedt, lyckats skapa med ett ArtificialLife system kallat Living Melodies. De har skapat en hel värld av individer som glider runt, äter, motionerar, lyssnar till musik och om rätt kriterier uppfylls, parar sig med andra individer. Resultatet blir musik och rätt häftig sådan tycker jag. Improvisation på hög nivå, lyssna och njut. (http://www.design.chalmers.se/projects/art_and_interactivity/living-melodies/)

5HIHUHQVHU A J F van Rooij, L C Jain, R P Johnson (1998) Neural Network Training using Genetic Algorithms World Scientific Brad Johanson, Riccardo Poli (1997) GP-Music: An interactive Genetic Programming System for Music Generation with Automated Fitness Raters School of Computer Sciense, The University of Birmingham. John Polito, Jason M. Daida, Tommaso F. Bersano-Begey, (1997) Music ex Machina: Composing 16th-Century Counterpoint with Genetic Programming and Symbiosis Artificial Intelligence Laboratory and Space Physics Research Laboratory, The University of Michigan. Stuart Russel, Peter Norvig Artificial Intelligence: A Modern Approach second edition, Prentice Hall Wolfgang Banzhaf, Peter Nordin, Robert E. Keller, Frank D. Francome (1998) Genetic Programming: An Introduction2QWKH(YROXWLRQRI&RPSXWHU3URJUDPV DQG,WV$SSOLFDWLRQV Morgan Kaufmann Publishers, Inc., dpunkt Verlag für digitale Technologie GmbH Example of a Run of Genetic Programming http://www.genetic-programming.com/gpquadraticexample.html Seven Differences Between Genetic Programming and Other Approaches to Machine Learning and Artificial Intelligence: http://www.genetic-programming.com/sevendiffs.html