Artificiell Intelligens HKGBB0 Kognitionsvetenskapliga programmet, HT 2001 Institutionen för Datavetenskap, Linköpings universitet Artificiell Musik? AI som kompositör 2001-10-18 "Musik ska byggas utav glädje, av glädje bygger man musik " Lill Lindfors Daniel Norén danno047@student.liu.se KogVet-2, fack 40
SAMMANFATTNING 2 FÖRORD/BAKGRUND 3 INLEDNING 4 MUSIKKOMPOSITION 4 INTELLIGENTA AGENTER SOM SKAPAR MUSIK 4 GenJam: En genetisk algoritm för generering av jazzsolon 5 Cybernetic Composer av Ames & Domino 7 JÄMFÖRELSE OCH EGNA TANKAR 8 KÄLLOR 9 1
Sammanfattning Musik kan komponeras av AI på flera olika sätt och med flera olika metoder. Jag väljer i denna rapport att berätta om två olika program som komponerar med mer eller mindre hjälp av AI. Programmen är GenJam: en genetisk algoritm för skapande av jazzsolon och Cybernetic Composer: en liten rock/jazz/blues-orkester som skapar hela låtar inom specifika genrer. I dessa båda program representeras AI på lite olika sätt då GenJam använder sig av genetiska algoritmer och utvecklar dessa enligt evolutionsteorier medan Cybernetic Composers AI-användande till huvudsak består i sökning. Kritiken jag framför i min diskussion rör till stor del begreppet kreativitet då jag tror att detta är en känsla som drivkraft för människor. Skapande och kreativitet strömmar ur känslor, inte ur regler och måltillstånd. 2
Förord/bakgrund Bakgrunden till mitt val av ämne till denna fördjupningsuppgift är ett vykort som jag för några år sedan hade i min ägo. På den tiden visste jag inte att jag senare i livet skulle läsa AI och tyckte mest att det som stod på vykortet var "en kul grej". Tyvärr har vykortet försvunnit men en minnesrest av vad som stod på det finns kvar, dock inte helt intakt. Vykortet i fråga tror jag var av gratistyp, dvs ett sådant gratisvykort som går att hitta på kaféer, biografer och i klädaffärer men inte heller det är säkert då sådana kort brukar göra reklam för nånting och någon sådan finns inte i minnesresten. Dock ska det noteras att minnet inte är helt perfekt i den här frågan heller. Jag har/hade för mig att rubriken på kortet var "Mozarts 19:e symfoni", med den betydelsen att Mozart skrev 18 symfonier och den 19:e är den skapad av någon/nånting annat. När jag frågade Rikard Karlsson (nuvarande KogVet-3) berättade han att Mozart normalt brukar tillgodoräknas 41 symfonier, inte 18. Alltså kan vi avfärda antingen mitt minne eller vykortets funktion som källa till kunskap, dock inte som källa till inspiration. Vykortet som då antagligen inte var rubricerat "Mozarts 19:e symfoni" handlade i sin mycket korta text om en dator (eller antagligen snarare ett program i en dator) som hade lärt sig spela musik i Mozarts anda. Mozart beskrivs ofta som en matematiker lika mycket som musiker och många är skrönorna om hur hans musik innehåller svaret på många av livets gåtor. Hur som helst ska denna matematiska musik ha lämpat sig väl att lära en dator. Programmet i fråga räknande/slumpade/skapade (beroende på vad vi egentligen tycker om kreativitet hos datorer) symfonier som enligt informationen på vykortet ska ha varit så bra att det gick att missta dem för Mozarts egna. Ett test i Turings anda ska ha används för att bevisa detta. Detta test gick helt enkelt till så att en grupp människor, oklart hur stor, sattes i en konsertsal. Därefter fick dessa människor (försökspersoner) lyssna till tre verk, ett av Mozart, ett av programmet och ett av en mänsklig kompositör som försökte härma Mozart. Försökspersonernas uppgift var sedan att gissa vilket verk som var skrivet av vem. Resultatet av detta blev, och nu är vi återigen påverkade av mitt svikande minne, att flest trodde att Mozart var Mozart och att den mänskliga kompositören fick flest röster på sig som dator. En seger för AIforskningen! Eller? Den kritik jag kan komma på mot detta är stor, framförallt eftersom jag trots gedigna efterforskningar inte lyckats hitta något bevis för att ett sådant experiment skall ha genomförts. Det finns program som skapar musik som liknar/efterliknar Mozarts men hur bra dessa är genom sådana Turingtest har jag inte hittat några resultat på. Dessutom finns det i det nämnda försöket flera osäkra mänskliga faktorer, försökspersonerna och den mänskliga kompositören. Att flest försökspersoner trodde att kompositörens verk i själva verket skrivits av datorn ses på vykortet som en seger för datorn men eftersom inget nämns om hur kunnig denna kompositör är så blir det genast lite svårt att avgöra. Dessutom har jag funderat över vilka försökspersoner som använts. Om dessa hade varit ointresserade av musik hade de med stor sannolikhet inte vetat vad det är som utmärker Mozart och hela försöket hade blivit en slumpgenerator, förutsatt att den datoriserade och den mänskliga kompositören inte är så dåliga att vem som helst hade gissat rätt på Mozart. 3
Är försökspersonerna däremot för musikintresserade finns den risken att de inte tror att Mozarts verk är hans utan att de vet det, de har hört det förut och känner därför igen det. Men som sagt, som källa sett är vykortet inte alls bra och eftersom jag inte ens längre har det i min ägo så är det inte ens intressant att inkludera någon studie av det i denna fördjupning inom AI. Vykortet får helt enkelt ta sin plats som inspiratör och nöja sig med denna. Inledning Däremot har jag under min informationssökning, främst via WWW, hittat många projekt inom musikskapande AI och tänker istället inrikta mig på några av dessa, väl utvalda exempel på komposition med hjälp av eller utförd av datorer. En tråkig sida av hela informationssökningen är det faktum att jag snabbt insåg att mina begränsade kunskaper inom musik var ett stort hinder i min förståelse av de texter jag läste. Mitt musikaliska intresse är stort, men då i huvudsak som lyssnare. Mina egna utsvävningar som musiker inskränker sig till en termins klarinettspel i mellanstadiet och min medverkan som sångare i ett fåtal band under min högstadie- och gymnasietid. I en huvuddel av de texter jag hittat används krångliga musikaliska termer som jag antagligen inte skulle förstått på svenska, men än mindre gör det på engelska. Tyvärr har det påverkat min helhetsförståelse för de processer som ligger till grund för de olika programmens musikskapande. Dock har jag försökt sätta mig in i de bakgrunder som finns till programmen, dess strukturer och frågan hur kreativitet representeras i dem. Vad som får dessa program att leverera musik. Andra frågor jag ser som intressanta är hur programmen vet vad som låter bra, och om det vi lär oss under kursen i fråga om intelligenta agenter, sökning osv kan tillämpas på musik. De två program jag avser titta djupare på är GenJam: A Genetic Algorithm for Generating Jazz Solos och Cybernetic Composer. Musikkomposition Musikkomposition kan beskrivas som en form av problemlösning. Kompositören vill skapa ett musikstycke som uppfyller de krav kompositören ställer på sin kreation. Likaså vill kompositören tillfredsställa en publik, uppfylla de krav som publiken ställer. Det går att behandla detta problem som en form av sökning då kompositören söker efter rätt ackord som skall passa en melodi, eller rätt melodi som passar en serie av olika ackord. Vad som är "rätt" ackord eller rätt melodi är väldigt individuellt men som kompositör vet man antagligen vad som är rätt för en själv, man vet vad man gillar. För olika musikstilar eller genres finns det olika typiska stilar vad gäller rytmer och traditionella val, barockmusik har sina kännetecken och rockmusik har andra. Kompositörer följer ofta dessa mönster inom den genre de är verksamma även om musik till stor del handlar om nytänkande. Intelligenta agenter som skapar musik Det är lätt att se hur denna komposition skulle kunna implementeras med AI då det ganska lätt går att beskriva dessa ordningar schematiskt och matematiskt. Att ge agenten tillgång 4
till en stor mängd kombinationer och regler som beskriver hur ett musikstycke sätts samman för att sedan definiera ett måltillstånd av färdig musik. GenJam: En genetisk algoritm för generering av jazzsolon GenJam är ett program skapat av John A. Biles vid Rochester Institute of Technology som skall simulera en novis jazzmusiker som håller på att lära sig att improvisera. Det hela baserar sig på ett system med genetiska algoritmer (GA) som genom ärvning, utslagning och mutering tar fram solon. Programmet är beroende av en mänsklig deltagare som fungerar som en mentor åt den novisa musikern och berättar för honom när de skapade slingorna låter bra eller dåligt. Denna återkoppling från den mänskliga mentorn påverkar den genetiska utslagningen genom att bra slingor får en högre chans till överlevnad än sådana slingor som fått sämre betyg. Hela betygsättandet sker i realtid samtidigt som programmet genererar musik. Utan att gräva ner mig för djupt i hur genetiska algoritmer fungerar ska jag försöka ge en kort förklaring hur de fungerar. Genetiska algoritmer är en värdefull och mycket användbar teknik för sökning i stora och komplexa problemrymder. Den genetiska algoritmen löser problem genom att med hjälp av genetiska operationer som mutation, ärvning och utslagning skapa en serie potentiella lösningar och utveckla dessa genom evolution. Detta fortgår tills en acceptabel lösning eller lösningar har hittats. Systemet är beroende av någon form av återkoppling/feedback för att kunna bestämma hur god varje enskild lösning är jämfört med de andra lösningarna i dess generation eller i tidigare generationer. En lösning tilldelas ett ofta numeriskt värde kallat "fitness" för hur lämplig just den lösningen är. Vanligast är att detta fitnessnummer bestäms av någon matematisk algoritm kopplad till problemet. Enligt Darwins "survival of the fittest" sker sedan en utväljning av vilka lösningar som får överleva och para sig. Denna selektion sker vanligtvis genom slump påverkad av fitnessvärden så att de med högre sådant värde är troligare att bli utvalda men inte är helt säkert blir det. Själva fortplantningen är inspirerad av den "riktiga" genetiken men inte begränsad av den så många olika metoder att fortplanta, mutera och para lösningar finns. För att överbrygga något som kallas "the generation gap" där man riskerar att tappa lovande individuella lösningar (individer i processen) brukar man låta några av de starkaste (de med högst fitness) överleva till nästa generation. Hur stor del som tillåts överleva bestämmer lite söktakten och chanserna till den bästa lösningen, hemligheten är att lagom är bäst. Den genetiska processen (urvalet och utvecklingen) sker sedan tills något sluttillstånd har infunnit sig. John A. Biles listar dessa som 1) maximalt antal generationer är nått; 2) en individ som matchar kriterierna för lösning utvecklas; 3) hela populationen av individer blir till samma sorts individ; eller 4) du får slut på tid, minne, tålamod eller pengar. Hur är då GenJam uppbyggt och vilka är processerna som styr det? En liten speciellt detalj i GenJam är att det är två olika populationer som på visst sätt är beroende av varandra som utvecklas av de genetiska processerna. Det är en population av takter (measures) och en population av fraser (phrases) där varje fras är uppbyggd av fyra takter. Bild 1 visar programmets arkitektur och så smått hur de olika delarna påverkar Bild 0: GenJams systemarkitektur 5
programmets utveckling. Programmet matas med en musikalisk bakgrund av en basslinga, en pianoslinga och en trumslinga som programmet ska spela till. Det matas även med en fil för vilken rytmisk stil och vilket tempo som skall användas. Dessa fyra syns i bilden som rutorna med enkelriktade pilar in i GenJam. Till detta tillkommer de två populationerna av takter och fraser som bildar grunden av vilken programmet skall skapa en slinga som uppfyller de ställda kraven. Programmet spelar sedan sin komponerade musik för den mänskliga mentorn som genom att trycka mer eller mindre på bokstäverna G (good) eller B (bad). Upprepade tryck på någon bokstav ger större viktning åt antingen bra eller dåligt hållet. Denna realtidsfeedback ger således betyg åt båda populationerna då fraserna är sammansatta av takter. GenJam använder alla sina fraser och takter när den skapar musik och inte bara de med störst fitness och detta för att programmet inte strävar efter det perfekta solot utan snarare en samling melodiidéer som kan användas på vilken låt som helst. Den novisa jazzmusikern lär sig en repertoar. Populationen fraser är 48 individer stor och populationen takter innehåller 64 individer. Bild 2 visar exempel på en fras och tre takter. Numret längst till vänster visar vilken individ i respektive population det är. Talet till vänster om det feta strecket är den nuvarande graden av fitness. Fras 23 innehåller i sin tur takterna 57, 11 och Bild2: Exempel på en fras och 3 takter 38 där takt 57 spelas 2 gånger i frasen. Siffrorna i varje enskild takt representerar noter eller händelser. 1 till 14 är noter, 0 är vila (rest) och 15 är en förlängning av antingen en tystnad eller en ton. Bild 3 visar frasen 23 på bitnivå, kromosomnivå. Bild 3: Fras 23 på bitnivå När sedan GenJam efter att ha spelat sin repertoar för den mänskliga mentorn och fått den feedback den behöver går programmet in i förökningsläge (breeding mode). Det första GenJam gör är att kasta bort 50% av båda populationerna så endast de "bästa överlever" dock med viss slumpning som nämns ovan. Dessa överlevande tillåts para sig och lämnar per par 2 avkommor, där den ena lämnas orörd och den andra skickas till de genetiska operatorerna. För varje population finns det 6 olika operationer, dock inte samma i de båda. För takter finns: Reverse; Vänder håll på takten, sista noten först. Rotate right; Skjuter alla toner åt höger med Pacman effekt i kanterna (petas det ut i högerkanten dyker det upp i vänster). Tonerna skjuts ett eller flera steg. Invert; 15 minus aktuell siffra. Det som var 0 blir 15 och 9 blir 6. 6
Sort Notes Ascending; Sorterar noterna i stigande ordning. Dock stannar 0 och 15 kvar på sina platser så att inte alla förlängningar i en takt hamnar sist. Sort Notes Descending; Som Ascending fast i fallande ordning. Transpose notes; Höjer tonerna med en slumpad siffra. Dvs aktuell siffra plus någon siffra, ett eller högre. Blir summan mer än 14/15 sänks den till lägsta fungerande ton. Avkomman skickas till en av dessa operatorer, vilken det blir slumpas. Till populationen med fraser används följande operatorer: Reverse; Byter ordning på de ingående takterna. Rotate Right; Skiftar åt höger, enl ovan. Genetic Repair; Ersätter den takten med lägst fitness med slumpvis vald annan takt. Super Phrase; Supermutation, inga eller få släktskap med föräldrarna. Lick Thinner; Ersätter den av takterna som är vanligast i hela populationen med en annan slumpvis vald takt. Orphan Phrase; Tar ut några av de mest sällsynta takterna i populationen och adopterar dom. Ger inget eller litet släktskap med föräldrar. Det två sista operatorerna är skapade för att lösa problem som kan uppstå pga det sätt som GA arbetar på. Bland annat kan problem uppstå om populationen har en tendens att konvergera mot en viss individ. För att motverka detta finns Lick Thinner som ser till att mångfalden bevaras för fortsatta generationer. Mångfalden är även skälet till att Orphan Phrase jobbar som den gör. De minst förekommande takterna får chansen att överleva genom denna "adoption". Processen med att träna GenJam kan vara ganska tröttande för mentorn då de första ca 10 generationerna inte innehåller några melodiöst sköna slingor. Dessa första generationer handlar feedbacken mer om bestraffning och enstaka belöningar av sånt som i alla fall låter som musik. Efter ett tag börjar GenJam producera huvudsakligen musikliknande solon och då kan mentorn ändra inställning lite och bara belöna sånt som faktiskt låter bra. Efter ytterligare några generationer klarar vår numera inte så novisa jazzmusiker av att spela hyfsade solon på sin trumpet. Det finns flera möjliga utvecklingar att genomföra för att utveckla GenJams potential. Framförallt finns det olika möjligheter att minska ner på programmets stora flaskhals, den mänskliga mentorn. En lösning skulle kunna vara neurala nät som tränas att åtminstone arbeta som en preliminär fitnessfunktion. Cybernetic Composer av Ames & Domino Till skillnad från GenJam är inte Cybernetic Composer beroende av mänsklig interaktion under skapandet av musik utan det klarar sig helt självständigt. En annan skillnad är att Cybernetic Composer skapar all musik och inte bara den från ett instrument. Den bestämmer rytm och takt, lägger trummor till osv. Dessutom kan Cybernetic Composer skapa musik till flera olika genres (rock, jazz, ragtime och latin jazz). Dock inskränker programmet sig till några få likartade rock och jazz stilar och kan alltså inte skapa precis vad som helst. Varje genre har tillgång till ett antal olika modeller som beskriver hur stycken kan komponeras och varje sådan modell innehåller ett ackordschema (chordal scheme) och ett grundmelodischema (thematic scheme). Själva AI-delen av Cybernetic Composer är lite mer diskret än den i GenJam då det inte handlar om några genetiska algoritmer utan snarare om sökning och slumpning. 7
Musiken skapad av programmet är uppbyggd i fyra lager: solo, bakgrunds ackord, bas och trummor. De olika lagren är till största delen helt omedvetna om vad de andra lagren gör men då de olika instrumentens roller är så väldefinierade i de aktuella musikstilarna skapas en illusion av samspel. Bild 4: Schema för basrytm Det första Cybernetic Composer gör när den ska komponera musik är att välja en rytm som lämpar sig för den aktuella musikstilen. Denna rytm skapar sedan det ramverk inom vilket de olika instrumenten helst ska hålla sig. Denna rytm väljs eller snarare slumpas fram genom att först konstatera inom vilken rot vi befinner oss och sedan följa de förprogrammerade mönster som finns att tillgå inom genren. Bild 4 visar oss hur ett sådant schema kan se ut för en basrytm och bild 5 visar ett exempel på hur en sådan vald basgång kan se ut. Procentsatserna framför varje möjlig utveckling visar hur troligt det är att just Bild 5: Exempel på basgång, genererad ur schemat på Bild 4 den slumpas fram. Roten bestäms ur det ackordschema (chordal scheme) som bifogats just den modellen och bild 6 visar ett exempel på ett sådant ackordschema. Bild 7 i sin tur ger ett exempel på en melodi/tonföljd (progression) som blivit utslumpad ur schemat i bild 6. Rytmen bestäms alltså genom ett flertal viktade slumpningar. 8
Bild 6: Ackordschema, Bebop-blues takterna 9 till 12 När sedan rytmen är komplett skapad bygger Cybernetic Composer på med att bestämma tonhöjden (pitch) på de olika tonerna. Valet av tonhöjd är belagt med många olika begränsningar. Bland annat måste tonhöjden passa tonen i den skapade melodin samt att den måste passa instrumentet som simuleras. Dessutom skapar programmet statistiska data som analyseras så att inte programmet dröjer sig kvar för länge i samma skalor. Ofta Bild 7: Den valda tonföljden (progression) ur Bild 6 kommer de olika kraven på tonerna och tonhöjden i konflikt med varandra att andra alternativ måste väljas, då kommer sökningen in. Bild 8 visar hur en sådan sökning går till och hur tonhöjden väljs med hjälp av "backtracking". Först väljer programmet tonhöjden på de primära tonerna i den ordning de kommer och efterhand hoppar det tillbaka och väljer tonhöjd på mellanspelet. Om Cybernetic Composer stöter på positioner där ingen Bild 8: Backtracking tillgänglig tonhöjd tillfredsställer de krav som finns hoppar programmet tillbaka det antal steg som behövs och fortsätter därifrån med en annan primär ton. 9
Bild 9: Grundmelodischema för 16-bar blues Nästa steg är grundmelodischema (thematic scheme) där programmet fortsätter bygga på melodin med hjälp av repetitioner av satser och takter, olika riff till både bas och solo slingan. Här kan jag utan att ljuga säga att mina musikaliska kunskaper sätter stopp för min förmåga att sammanfatta och komprimera informationen om hur selektionen går till men rent generellt är det här melodin byggs ut med "kosmetikan" som gör låten. Det är slingor som upprepar sig, fraser anpassade att på olika sätt smälta samman i varandra och andra musikaliskt fina trick. Bild 9 visar ett exempel på ett grundmelodischema för versen i en blueslåt (16-bar blues). Med hjälp av dessa scheman och den valda modellen definierad av genren skapar således Cybernetic Composer ett stycke rock, jazz eller blues på egen hand. Jämförelse och egna tankar Så vad är då skillnaderna och likheterna mellan dessa två program. Den stora likheten är att det är datorprogram som skapar musik och att dom gör det med mer eller mindre inblandning av artificiell intelligens. Skillnaderna är fler helt klart då det ena programmet är i behov av mänsklig inblandning för att kunna lösa sin uppgift medan det andra är det inte. Dessutom skiljer sig det grundläggande AI-användandet då GenJam använder sig av GA och Cybernetic Composers AI består i sökning. Andra skillnader är att Cybernetic Composer skapar hela sin musik där GenJam får tilldelat en rytm, bas och melodi. Cybernetic Composer däremot tittar och slumpar i sina listor för att komma fram till sina slingor medan GenJam lär sig och utvecklas under arbetets gång. Helt klart kan jag konstatera att de två programmen angriper komposition på olika sätt och använder sig av begreppet kreativitet på olika sätt. Skulle jag välja vilket jag tycker är "mest AI" skulle jag välja GenJam, den mänskliga mentorn till trots. Genetiska algoritmer känns, och nu går jag på känsla, mer artificiellt och intelligent i någon bemärkelse. Jag hyser all respekt för sökning som AI men känner ändå att slumpning spelar för stor roll i Cybernetic Composer. Slump förekommer visserligen i GenJam också men då på ett annat sätt, där är slumpen en del av genetiken och den leder till utveckling. I Cybernetic Composer slumpas det mellan tabeller som är förbestämt värda olika mycket. Det känns väldigt mekaniskt och stelt att på detta sätt skapa musik, även om musiken för den del inte är steril och tråkig. Jag ser kreativitet som viljan, önskan rent av, att skapa något. Detta är självklart en alldeles personlig bild av det hela men jag har svårt att förstå mig på de kreativa delarna av ett datorprogram. I Cybernetic Composer är drivkraften ett sluttillstånd som matchar de uppsatta reglera för vad som utgör ett stycke musik. I GenJam är drivkraften den 10
mänskliga mentorn som antingen fortsätter arbeta med programmet eller bestämmer att det räcker. Jag påstår nu inte att de två programmen inte skapar något för det gör de, båda producerar musik. Frågan är om mänsklig kreativitet har simulerats och i så fall i vilket fall eller vilka program. Jag tror att den mänskliga önskan att skapa, att med hjärnan formulera nya tankar är en av de mest grundläggande mänskliga egenskaperna. Det är det som visar att vi är människor. Båda i denna text nämnda program försöker mer eller mindre bra härma detta beteende utan att lyckas. Källor Biles, John A. GenJam: A Genetic Algorithm for Generating Jazz Solos; Information Technology Department / Rochester Institute of Technology. (1994) http://www.it.rit.edu/~jab/genjam94/paper.html Ames C & Domino M. Cybernetic Composer: An Overview; I Balaban, Ebcioglu & Laske: Understanding Music with AI, AAAI Press, Cambridge (1992) Ett engelskt-svenskt lexikon (mycket behövligt) http://www-lexikon.nada.kth.se/skolverket/lexin.shtml 11