GENETISK PROGRAMMERAD MUSIK OCH



Relevanta dokument
Genetiskt Programmerad Musik

0XVLNVNDSDQGHJHQRP *HQHWLVN 3URJUDPPHULQJ

Artificiell Musik? AI som kompositör

Slutrapport för Pacman

Digitalt lärande och programmering i klassrummet. Introduktionsworkshop - Bygg ett akvarium i Scratch

Planeringsspelets mysterier, del 1

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

ANONYMA TENTAMINA (FÖRDELAR) ÅSIKTSTORG:

SLALOMINGÅNGAR hur svårt kan det vara?

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.

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

Genetisk programmering i Othello

RAPPORT: ATT UPPLEVA EN UTSTÄLLNING HELT I LJUD. FÖR UTSTÄLLNINGEN VÄRDEFULLT. BAKGRUND..s 2 METOD...s 2 RESULTAT...s 3 9 ANALYS AV WORKSHOP...

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

Grunderna i stegkodsprogrammering

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

Hur kommer man igång?

MusikteoriForum Öst !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Slutrapport för JMDB.COM. Johan Wibjer

En handledning för studerande på Högskolan Kristianstad

Utvärdering 2015 deltagare Voice Camp

Det musikaliska hantverket

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

Föreläsning 4: Poster

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.

Viktigt att tänka på i en intervju och de vanligaste fallgroparna. som intervjuar. Ett kostnadsfritt whitepaper utgivet av Level Recruitment

Krypteringteknologier. Sidorna ( ) i boken

Dataspel för barn med läs- och skrivsvårigheter

Interaktion med den genetiska algorithmen GenJam

Peter Ottosson 31/ Introduktionskurs i datateknik II1310

FÖRKORTA DIN VÄG PÅ BANAN

GenJam En musikalisk genetisk algoritm?

OBS - ranking NYTT RANKINGSYSTEM. Jan-Erik Thomasson INNEHÅLL

Varför är vissa guppys gråa och trista medan andra är färgglada och stiliga?

TJUVSTARTER I AGILITY - en kamp i envishet

DK-serien. Gör en fotobok med myphotobook.se

Brukarenkät IFO Kvalitetsrapport 2014:02 KVALITETSRAPPORT

Trädgårdsdiakoni. -Ett rehabiliterings projekt i Allerums Pastorat

The Pirate Bay-rättegången, dag 6 Fritt nedtecknat

Handbok för LEDARSAMTAL

Mäta effekten av genomförandeplanen

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

Kundundersökning mars Operatör: Veolia Transport AB Trafikslag: Tåg Sträcka: Linköping - Västervik

75059 Stort sorteringsset

Bett mässa i London 2013

LEGO Mindstorm-robot

Muffinsmysteriet. Avsnittet innehåller: problemlösning, matematiska relationer, taluppfattning, multiplikation och systematisering.

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

Survey&Report steg för steg: Skapa rapport

Sagor och berättelser

Projekt samhällsomvandling - Gällivare

[MANUAL TILL LUVITS GRUNDFUNKTIONER]

SkövdeNät Nöjd Kund Analys

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

I slutet av januari 2015 reste jag och ytterligare fem medlemmar av Six Drummers till Mexico och genomförde denna workshop under en intensiv vecka.

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

Lumbago - Förord. Välkommen till Journalprogrammet Lumbago.

Betyg E (med tvekan) : (= Eleven beskriver mest med egna ord hur man upplevt träningen)

ETT ÅR MED DIN TRÄNING

Så bra är ditt gymnasieval

Förord. ra och Ackordspel (Reuter&Reuter), men andra böcker kan naturligtvis också användas (se

Förberedelser: Sätt upp konerna i stigande ordningsföljd (första inlärningen) eller i blandad ordningsföljd (för de elever som kommit längre).

KRAVNIVÅER. Åtvidabergs kommuns grundskolor MUSIK

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Från sömnlös till utsövd

Nallelek Lärarvägledning

Clicker 5. Lathund kring de vanligaste och mest grundläggande funktionerna för att komma igång med Clicker. Habilitering & Hjälpmedel

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?

Totalt finns det alltså 20 individer i denna population. Hälften, dvs 50%, av dem är svarta.

Introduktion. Markera den gröna bocken. Skriv in URL:en Klicka på knappen Platser.

Inför föreställningen

Användarmanual till DAISY-spelaren Telex Scholar

Valberedningen, representant för Y1

Fysiska aktiviteter FYSISKA AKTIVITETER. Zumba och Linedance

Fakta om Melodifestivalen

DATORER OCH PROGRAM. Datorn är en symbolmaskin

Barns och ungdomars åsikter om barnoch ungdomsmottagningen

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

19. Skriva ut statistik

BARNS SPRÅKUTVECKLING

Projekt. Revisionmetodik -utbildning i systemkontroll. Ett projekt inom livsmedelsavdelningen. Genomfört 2010.

Information till föräldrar/stödjande vuxna om internetbehandlingen för insomni:

Genetiska Algoritmer

Elektronisk hantering, förvaring och delning av examenstillfälles specifika bedömningsmaterial (dokument, video) på Office 365

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Genetik'i'musik' En'analys'av'genetiskt'inspirerad'programmering'och'dess'kapacitet' till'musikskapande'

Lika eller olika? Hur företagare och unga ser på löner och anställning ELIN BENGTSSON DECEMBER, 2009

Brukarenkät IFO Kvalitetsrapport 2011:01 KVALITETSRAPPORT

Programmeringsuppgifter 1

Gesäll provet Internetprogrammering I. Författare: Henrik Fridström. Personnummer: Skola: DSV

Får jag be om ordet!

Att använda Stava Rex i Word 2007

Matematikundervisning och självförtroende i årskurs 9

Arkitektoniskt historieberättande En undersökning av narrativets funktioner och verktyg

Exempeluppgift i Logikstyrning. 1 Inledning. 2 Insignaler och utsignaler

Maskinskrivningsteknikens vara eller icke vara?

Hitta kunder som frilansare

Alla får ligga. strategier i förförelsekonst för den moderna gentlemannen och kvinnan

Bruksanvisning DAB One

Lära tillsammans som grund för utveckling erfarenheter från förskolan. Sunne 3-4 februari 2010 Katina Thelin

Transkript:

GENETISK PROGRAMMERAD MUSIK OCH UTVECKLINGEN AV AUTO FITNESS RATERS

Abstract Kan datorer skapa egen musik? Kan datorer lära sig vad som är bra musik? Med hjälp av Genetisk programmering och neurala nät är svaret på dessa frågor ja. Genetisk programmering är en del av AI som efterliknar vår egen evolution där survival of the fittest är den som vinner. I en studie som gjorts av Brad Johnson och Riccardo Poli har korta, tillfredställande melodislingor genererats fram med hjälp av genetisk programmering. Man har först tagit hjälp av människan att bedöma vad som är bra musik, sedan har man även skapat automatiska ranknings-system med hjälp av att träna nätverk. Datorn har själv kunnat generera egen musik, men det är fortfarande ganska enkel musik och inte alltid så tillfredställande, det finns mycket forskning kvar i detta område. Detta arbete är baserat på en studie som heter "Automated Fitness Raters for {GP}-Music System", av Brad Johanson från University of Stanford och Dr. Riccardo Poli från University of Birmingham. Alla melodislingor som nämns kan man lyssna på nätet. Hemsidan är http://graphics.stanford.edu/~bjohanso/gp-music/

Innehållsförteckning 1. En överblick över GP-musik 2. Uppbyggnad av GP-programmet 2.1 Trädstruktur 2.2 Parameter srecification 2.3 Fitness system 2.4 ADF 2.5 Nya problem och nästa steg 2.6 Förbättringar till GP-programmet 3. Automatisk Rankning 3.1 Hur fungerar nätverken? 3.2 Automatiska Rankningslistan 3.3 Den automatiska Tournament rankningen 3.4 Resultat från de automatiska systemen 3.5 Andra system 4. Slutsatser och egna funderingar 5. Källförteckning

1. En överblick av GP-musik Genetisk Programmering (GP) är en metod som automatiskt kan generera ett dataprogram, i det här fallet handlar det om att kunna skapa musik. Det finns flera som gett sig på att försöka få datorer att agera kreativt. I sin bok the technology of genetic programming har en man som heter Koza (Koza 1992) utvecklat ett system för att göra program som själva kan skapa. Han visar på ett enkelt sätt hur man ska implementera ramverken för att skapa ett sådant program. GP-programmet är byggt på idéerna från vår egen evolution. Man kan skapa nya individer med hjälp av reproduktion, mutation och korsning för att få fram den bästa individen. Ett GP-musikprogram skapar korta melodislingor, den arbetar från grunden, med enkla toner och pauser. Från början har den arbetat på ett interaktivt sätt med en användare som får betygsätta melodislingan mellan varje generation, detta har senare utvecklats till att använda sig av automatiska rankningssystem med hjälp av neurala nät. Här blir musikkritikerna parametrar till systemet i form av fitness funktioner (Spector and Alpern, 1994). Dessa GP-program bygger på att en population skapas genom en trädstruktur. Längs ner har vi noderna (endast enkla noter) som på vägen sätts ihop av olika funktioner, till slut bildar dessa en sekvens, en melodislinga. En positiv sak med att använda sig av genetisk programmering är att vi inte behöver begränsa oss till en viss sekvenslängd och det finns möjligheter att lägga till eller ta bort olika funktioner som till exempel att kunna upprepa en slinga eller spela den baklänges i samma stycke. Hur detta fungerar återkommer vi till senare. Musiken bedöms och beroende på denna bedömning så kommer ett urval att göras och en ny generation av individer att skapas. De individerna som har bra fitness kommer att vara kvar till nästa generation. Andra individer som inte klarat sig lika bra kommer att muteras, det vill säga att slumpmässiga förändringar görs i en kopia på individen. Ett annat exempel är crossover, som innebär att delar av två individer sätts samman till en ny individ. Efter ett antal generationer har man förhoppningsvis fått något som uppfyller de villkor man är ute efter. I det här fallet är det att få fram en melodislinga som är trevlig att lyssna på. Viktigt i detta program är att få parametrarna rätt, det vill säga hur stor ska en population vara, vilka funktioner ska användas och hur många generationer ska populationen genomgå? Vi ska börja med att titta på hur detta program är uppbyggt. 4

2. Uppbyggnaden av GP-programmet Noterna som använd i programmet är de vanlig standard noterna C, C#, D, D#, E, F, F#, G, G#, A, A#, H. Programmet är byggt med så mycket som åtta oktaver, det vill säga att det finns 7 x 8 toner att skapa musik med. F#4 betyder att vi ska spela Fiss (F#) femte oktaven, detta eftersom oktavskalan går från 0-7. Däremot är det bara en eller två oktaver som kommer att användas åt gången i tester som beskrivs nedan. Som i all Genetisk Programmering så kan man representera individerna i en trädstruktur som har funktioner och terminaler. Terminalerna innehåller noterna och funktionen berättar hur dessa ska användas. Nedan listas de funktionerna som finns i detta program: Play_two (2 argument): Den här funktionen tar två notsekvenser och sätter ihop dessa, den kan ta alla notsekvensker inom de oktaver som terminalen har. Add_space (1 argument): Denna fuktionen lägger in en paus, detta används för att variera hastigheten på musiken. Play_twice (1 argument): Spelar upp samma sekvens två gånger. Shift_up (1 argument): varje not i sekvensen flyttas upp till nästa hela not. Har man ett C flyttas den alltså till D osv. Shift_down (1 argument): fungerar precis som shift up men flyttar ner alla noter ett steg. Mirror (1 argument): En sekvens spelas baklänges. Play_and_mirror (1 argument): En sekvens spelas först åt ett håll och vänd sedan och spelas baklänges. De två sekvenserna sätts ihop. Funktionerna är nödvändiga av olika anledningar. Eftersom det i botten av trädet endast finns enstaka noder så är Play_two ett måste för att sekvenserna skulle kunna bli längre än en not. De andra funktionerna är bra eftersom de tillåter en struktur att återkomma i samma musikslinga, detta kommer att ge ett en melodi som förhoppningsvis är lik det vi människor brukar framställa. Men det påpekas flera gånger att studien använt sig av väldigt lite musikteori. Terminalerna kan till exempel se ut på detta sätt 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 Denna terminal använder sig av noter från fjärde och femte oktaven. Sen finns RST som innebär paus i slingan, detta kommer att påverka melodins hastighet. Pseudo-chords kommer att introduceras senare. 5

2.1 Trädstruktur (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)))) GP-programmet är skrivit i en lisp-funktion som till exempel kan se ut som ovan. När detta evalueras kommer en nod att fortplanta en not-sträng, som modifieras av nästa nod och så vidare. Om förälder-nodens funktion är play_two så kommer alltså barnen att sättas ihop till en sträng och skickas vidare till nästa nod om till exempel är mirror, då kommer denna sträng att vändas om och finns det fler barn-noder till denna kommer även dessa att läggas ihop, på så sätt byggs en liten melodislinga. Ett exempel på hur ett träd kan se ut; A-5,RST,A-5,RST,F-4,RST,F-4,RST,E-4,RST, E-4,RST,F-4,RST,F-4,RST,A-5,RST,A-5,RST shift-down B-5,RST,B-5,RST,G-4,RST,G-4,RST,F-4,RST, F-4,RST,G-4,RST,G-4,RST,B-5,RST,B-5,RST add-space B-5,B-5,G-4,G-4,F-4,F-4,G-4,G-4,B-5,B-5 Key play-and-mirror F-4 Terminal B-5,B-5,G-4,G-4,F-4 function Function play-two B-5,B-5,G-4,G-4 F-4 play-two F-4 B-5,B-5,G-4 G-4 play-two shift-down B-5,B-5 G-4 A-5 play-two shift-down A-5 B-5 B-5 A-5 B-5 B-5 A-5 6

2.2 Parameter specifikation I GP-programmet används 16 individer och man gör det över 6 generationer (det är vad som krävs för att få en trevlig melodi), individerna i programmet skapades genom cross-over, mutation och reproduktion operatorer. Uppdelningen är som sådan att 70 % av de nya individerna sker genom cross-over, detta innebär att en del individer kommer att sättas ihop till en ny individ. 15 % av individerna kommer att muteras, vilket innebär att man slumpmässigt ändrar en position i individen. De sista 15 % är sådana som reproduceras, alltså skickas vidare till nästa generation utan att ändras. Dessa parametrar är standard och är de som togs fram i Kozos bok, men andra parametrar kommer att testas senare. 2.3 Fitness system Eftersom det är väldigt subjektivt vad man gillar för musik så är det svårt att sätta en matematisk funktion för vad som är bra. Det som först användes i GP musik var att människor betygsatte musiken mellan varje generation, de använde sig av en skala från 1-100. En sekvens i taget spelas upp och bedömaren kan själv välja om han/hon vill lyssna på sekvensen flera gånger innan han/hon rankar. Bedömaren klickar sedan själv fram till nästa sekvens när de känner sig redo. Vill man höra dessa sekvenser som är framtagna genom GP finns de på sidan: http://graphics.stanford.edu/~bjohanso/gp-music/gp_music-old.html De första testerna använde sig bara av funktionerna play_two och add_space, som gör att man kan bygga ihop sekvenser och även variera tempot. Det visade sig att man på detta sätt kunde få fram melodier som var trevliga att lyssna på men de upplevdes som ganska strukturlösa. Genom att lägga till de andra funktionerna (som diskuterats tidigare), så upplevde lyssnarna musiken som bättre, även om det eliminerade de stora skillnaderna mellan den bästa och den sämsta sekvensen. Det innebar att de allra sämsta sekvenserna försvann, men även de allra bästa. Ett annat problem är de korta sekvenserna som skapats (bara en eller två noter), alla dessa fick dåliga betyg och försvann endast för att de var korta och påverkade då inte evolutionen i någon vidare utsträckning. I ett försök att förbättra detta ändrades trädets djup till 12, men någon större förändring i musiken märkte man inte, däremot så tog det mycket längre tid för bedömaren att gå igenom alla sekvenser. Att detta inte genererade märkbart längre sekvenser beror på att den i flera generationer kan använda sig av shift_up eller shift_down flera gånger i rad och då kommer inte individer sättas ihop och bygga längre sekvenser. Inte heller sekvenskernas kvalité förbättrades av att man använde fler generationer, de längre sekvenserna fick överlag sämre betyg än innan. Att öka djupet var därmed inte en bra lösning. Nya lösningar sattes i verket. 2.4 ADF För att förbättra musiken skapade Brad Johnson och Riccardo Pico så kallade Automatically defined functions (ADF). Tanken med dessa är de har ett eget träd i programmet men som används i huvudet trädet, de ska kunna hjälpa till att hitta en struktur i melodin. Detta innebär att de med hjälp av ADF programmen blir mindre individer och färre antal generationer innan någon tillfredställande melodi har funnits. 7

Många melodier har teman som gör att samma melodislinga återkommer flera gånger i samma stycke, andra melodier har vissa tekniker som återkommer. Ett exempel på det senare är att samma sekvens spelas flera gånger med olika hastighet. Om en funktion genererar en bra melodi så kan den användas flera gånger i sekvensen. På detta sätt kan ADF även utveckla en viss stil som den kan använda sig av under hela sekvensen. I det första försöket introducerades tre funktioner. Den första funktionen tog inga argument utan var till för att generera samma melidoslinga flera gånger i en sekvens. Den andra har två inputs, och skulle arbeta med och förhoppningsvis förbättra tekniken genom att spela upp en bra del av musiken i olika hastigheter. Den tredje skulle helt enkelt kunna anropa de första två när detta behövdes. Tyvärr blev detta första försök inte så lyckat, de olika sekvenserna blev långa och enformiga. Det blev alltså ingen förbättring i sekvenserna utan de blev helt enkelt bara längre. Nästa steg blev att ändra trädets djup till 9 och att prova två nya tekniker för att försöka att förbättra musikens kvalité. Den första åtgärden var att endast låta programmet bara generera C-dur noter, alltså inga fiss med i bilden. Detta ger en större chans att man får en glad melodi som inte har många toner som inte passar in. Förutom terminaler så fick shift_up och shitf_down modifieras. En annan åtgärd var att eliminera sekvenser som hade mindre än 3 noter i den första populationen. Detta var ännu ett försök att få bort de extremt korta sekvenserna som begränsade evolutionens teknik. Dessa nya åtgärder fungerade bra och man fick ett trevligt resultat, detta till stor del då man bara använt sig av C-dur skalan och tagit bort toner som skulle kunna ge ett illalåtande ljud. Även problemet med för korta sekvenser var nästan borta. För att göra det ännu bättre introducerades pseudo-ackorden, som gör att noterna som tillhör ett visst ackord spelas tillsammans, det är not 4½ och not 6 från ursprungsnoten. När man spelar ett ackord spelas ofta dessa tre tillsammans men här spelades de sekventiellt. Såhär ser pseudo-ackord tabellen ut: Pseudo-Chord C-Chord D-Chord E-Chord F-Chord G-Chord A-Chord B-Chord Corresponding Note Sequence C-4,E-4,G-4 D-4,F#4,A-5 E-4,G#4,B-5 F-4,A-5,C-5 G-4,B-5,D-5 A-5,C#5,E-5 B-5,D#5,F#5 Resultaten var oväntat bra! Nästan alla melodier lät bra, det som gick att klaga på var att många av melodierna lät likadana och därmed inte så intressanta eftersom man använt sig av samma toner om och om igen. Ett av de bättre resultaten är den sekvens som visas nedan. Den använde sig av en tidig sekvens som genererades fram i 5 generationen och satte ihop det med individer i generation 8. Den använder alltså ADF funktionen för strukturering samt att den 8

använder sig av psuedo-ackorden då den spelar a-ackordet bakåt och framåt. Sekvensen såg ut såhär, och finns att lyssna till på ovannämnda hemsida: Note Sequence: G-4, RST, B-5, RST, D-5, RST, G-4, RST, B-5, RST, D-5, RST, RST, D-5, RST, B-5, RST, G-4, RST, D-5, RST, B-5, RST, G-4, A-5, RST, C-5, RST, E-5, RST, RST, E-5, RST, C-5, RST, A-5, G-4, RST, B-5, RST, D-5, RST, G-4, RST, B-5, RST, D-5, RST, RST, D-5, RST, B-5, RST, G-4, RST, D-5, RST, B-5, RST, G-4 Web Site File Name: 9tune.au. Har musiken blivit bättre med dessa nya funktioner? Det visade sig att fitness värdet alltid var högre i nästa generation. Alltså kan man dra slutsatsen att det finns potential att skapa musik med hjälp av genetisk programmering. 2.5 Nya problem och nästa steg De funktioner som skapats har gett oss trevliga melodier men har till stor del tagit bort en del av skapandet och gett oss ganska O-varierande, tradiga melodier. I testerna var det alltid samma betygsättare som användes för att inte subjektiviteten skulle spela in i resultaten. Däremot kan bedömaren bli trött och ha svårt att koncentrera sig. Vad siffran 25 betyder i börjar kanske inte var samma som i slutet. Det andra som togs upp var naturligtvis friheten i musikskapandet och hur mycket struktur som ska byggas in. Det kommer inte att kunna utvecklas någon mer intressant musik så länge vi har så många begränsande strukturer. Tar vi bort strukturerna kommer det att ta lång tid för evolutionen att generera något bra, och detta är ett särskilt stort problem så länge man använder sig av mänskliga bedömare. Det sista som diskuterats är att en sekvens ibland blir för dominerade i ett stycke. Är det en melodi som i början får hög fitness så kan den användas för många gånger och de andra sekvenserna trycks bort. 2.6 Förbättringar till GP-systemet Tre ändringar gjordes till GP-programmet, det första var att låta rankningen mellan generationerna vara mer konsekvent. Innan har all rankning varit relativ mellan olika körningar och generationer. Varje generation var en egen grupp och betygsättaren kanske gav den bästa i den gruppen ett bättre betyg där än vad den gjort om den varit med i en grupp som hade bättre sekvenser. Det var också möjligt att ge samma sekvens (som reproducerats) olika betyg i olika generationer. Att betygsättaren kommer ge olika betyg vid olika tillfällen går inte att ändra på, däremot sattes en funktion in som gör att om en sekvens fått ett betyg så kommer betyget att finnas kvar om sekvensen reproduceras. Användaren har rätt att lyssna på sekvensen och se vilken klassificering den fått i tidigare generationer innan den bedömer de nya sekvenserna i den nya generationen. Den andra ändringen som gjordes var att ändra koden så att olämpliga individer elimineras automatiskt innan de sätts in i en ny generation. Tidigare problem var att sekvenser blev för långa eller för korta och därför alltid fick dåliga betyg, att ha kvar dessa saktar ner den evolutionära processen ganska kraftigt då det är en relativt liten mängs av sekvenser som 9

används i varje körning. Men kan nu själv ställa in vilken längd man vill ha som max och min för att de ska få gå vidare till nästa generation. Den tredje ändringen var att öka till att ha två oktaver (vi begränsade oss till en tidigare för att få en mer sammanhängande melodi). Detta var en liten ändring men visade sig göra stor skillnad i resultatet. Detta innebar att det även kunde vara fler pseudokoder, vilket också förbättrade det musikaliska resultatet. Man har även lagt in ett tournament-interface (utslagning) som innebär att man kan spela två sekvenser i en tournament, och sedan behöver man endast säga vilken som är bäst och inte klassificera på någon skala. Detta används mest i generationer där många är dåliga och det är svårt att sätta betyg på vilken som är sämst. Denna funktion används bara i den generationen, efter att alla har jämförts med varandra så sätter datorn ett betyg på den där det börjar med att den sämsta får 10 (utav 100 möjliga). Den näst sämsta får betyg utefter en jämförelse med den och den sämsta, och så fortsätter detta uppåt. Är den lite bättre flyttas den upp en rankning och är den bättre än så flyttas den upp två rankningar osv. Detta system fungerar bra och ger ett bättre fitnessresultat, men det bli många ratings. Har du till exempel 20 individer så skulle det utan detta system ta 20 ratings men i detta fall tar det 86 jämförelser (som betyder 172 sekvenser) eftersom ekvationen ser ut som sådan 0(n x log2 n). På grund av detta kan det alltså ta upp till 8 gånger längre än de vanliga rating-sättet. Huvudanledningen att göra detta system är att börja skapa data som går att använda i ett neuralt nätverk som förhoppningsvis kommer göra all klassificering själv. Brad Johnson och Riccard pico kände sig nöjda med de resultat de fått. En melodislinga hade producerats och den var behaglig att lyssna på. Nästa steg var att bygga automatiska fitnessraters med hjälp av neurala nät. 10

3. Automatisk rankning Målet med Genetiskt Programmerad musik har alltid varit att den helt på egen hand ska kunna skapa musik och avgöra vad som är bra. Nu har vi kommit ett steg på vägen, den kan skapa någorlunda bra musikslingor, men hur ska vi få den att själv kunna avgöra vad som är bra? Två stycken auto-raters har skapats, dels en som arbetar med en skala från 1-100 (kallas list auto-rater) och sen en som jämför två sekvenser med varandra för att få fram den bästa (kallas the tournamnet auto-rater). Att använda sig av neurala nät för att bygga automatiserade fitness-raters var inte ett självklart val då de fungerar bäst när det är samma mängd av input hela tiden, och detta är inte fallet med GP musik då sekvensernas längd varierar hela tiden. Trots detta är neurala nät bra på grund av dess flexibilitet och man bestämde sig för att använda sig av standard back propagation, som arbetar med vikter. I back propagation så har varje kontakt in i en nod en viss vikt som sedan modifieras med back propagation träning. I ett nätverk med delade vikter så använder en del noder samma vikter och kommer därför att ändras flera gånger under back-propagation. 3.1 Hur fungerar nätverket? Weight N+1 #1 Level N+1 Spread Level N+1 Level N+1 Weight Level N+1 Weight N+1 #2 N+1 #4 Weight N+1 #3 Level N+1 Delta Level N Level N Level N Level N Level N Level N Level N Diagrammet visar två lager utav en av auto-rankningens nätverk samt kopplingarna mellan dem. Botten nivån, som kallas nivå N är närmast inputen och den övre nivån kallas nivå N+1, är närmast outputen. Varje nod i den övre nivån får input från den lägre nivån. Level Spread kallas de antal noder som går in i en nod på nästa nivå, i det här fallet är det 4. Det sker en del överlappningar då en del noder på den övre nivån får input från samma noder, detta är vad Level Delta determinerar. Alltså, Level Delta är hur många som överlappar, i det här fallet är det 2. Detta innebär att den första noden på den övre nivån får input från första till fjärde noden på undre nivån medan nästa nod på övre nivån börjar få sin input från den tredje noden på undre nivån (se bilden ovan). Desto högre Level Delta är desto mer autonomt fungerar de övre noderna jämfört med att de har en högre Delta Level, då de korrelerar de mer eftersom de får input från samma noder. 11

De högre nodernas Level Spread har kontakt med de undre noderna, vikterna på dessa kontakter delas. Detta innebär att vikten på den första inputen till varje övre nod är densamma och på vägen tillbaka i back-propagation så kommer den undre noden att modifieras utav alla noder som den har kontakt med. 3.2 Automatisk rankningslistan Den automatiska rankningslistan ska ge en rankning på en skala av 1-100 precis som människor tidigare gjort. Det finns två olika topologier som använts till detta, en som har 1 output och en som har 7 outputs, detta gör bara skillnad i slutresultatet som kommer att beskrivas senare. Båda har 5 nivåer, varav 3 är dolda lagret och de andra två input och output lager. Output Out 1 Out 2 Out 3 Out 4 Out 5 Out 6 Out 7 Third Layer Third Layer Second Layer Second Layer First Layer First Layer Input Layer (a) One Output Node Input Layer (b) Seven Output Nodes Eftersom sekvenserna som ska rankas är av olika längd så bygger man upp ett nytt nätverk för varje ny individ som ska evalueras. De delade vikterna lagras och används i varje nätverk, på så sätt kan man hålla den förenlig trots alla olika nätverk som byggs. Ett nätverk är byggt genom att först skapa en input nod för varje not (eller paus) i sekvensen som ska evalueras. Värdet på noten laddas sedan in på följande sätt; om det är en not så divideras den med 72 och sedan laddas den in i noden. Värdet för noden är 12 gånger oktaven plus notvärdet där A-0 är -2, A#0 är -1 B-0 är 0 och C-0 är 1 osv. Att de negativa talen är med är för att poängtera att C- 0 är den lägsta noten i systemet. Om det är en paus (rest) så laddas a-1 in i noden. Här används -1 för att skilja på noter och pauser. Sedan skapas det tillräckligt många noder för att täcka sekvensen, givet vilken Level spread och delta den har. Exempelvis om ve har en sekvens på 6 noter/pauser och en level spread på 4 och en delta på 2 så skulle två noder behövas på första nivån. Skulle de inte gå jämt ut mellan sekvensen och input noder så avrundas nod antalet uppåt. Efter detta skapas kontakten mellan noderna som tidigare diskuterats. Detta fortsätter sedan uppåt i nivåerna på samma sätt och sedan till output noden, är det 7 outputnoder så har varje nod kontakt med alla noder i den högsta nivån. På så här sätt så har man löst problemet med att sekvenserna är av olika längd, här kan de vara vilken längd som helst så anpassar sig nätverket. Det man kan klaga på är däremot att vid de högre nivåerna så används inte alltid alla vikter eftersom sekvensen inte är så lång för att använda så många kontakter. När nätverket sedan tränas med hjälp av back propagation så får en del vikter och nivåer mer träning än andra. 12

Resultatet i nätveket med en output ger ett värde mellan 0 och 1, detta multipliceras sedan med 100 för att man ska få ett värde mellan 0-100. Eftersom denna inte gav de resultat man önskat så skapades en ny rankare med 7 outputs (som vi tidigare sett på bilden). Här avrundas varje output svar till 0 eller 1 och dessa binära värden behandlas sedan som sju bits binärt tal (0-128) som sedan sätts till en 1-100 skala för inlärning och användning i GP-music systemet. De parametrar som går att justera i den automatiska rankinglistan är: Level 1, 2 eller3 spread Level 1,2 eller 3 delta Output typ (1 eller 7) 3.3 Den automatiska Tournament rankningen Den ska liksom list auto-rankningen utföra de som människor tidigare gjort, men här bedöma vilken av två sekvenser som är bättre. Den fungerar ungefär som list auto-rankningen vad det gäller nätverken men topologin ser annorlunda ut. Output Third Layer A Third Layer B Second Layer A Second Layer B First Layer A First Layer B Input Layer Sequence A Input Layer Sequence B Här finns två uppsättningar av alla nivåer, detta eftersom den har två sekvenser som ska jämföras. En annan skillnad är att här har varje not/paus en egen nod vid inputlagret, sedan byggs nätverket upp likadant som tidigare beskrivits. Anledningen till detta är att de två sidorna ska vara symetriska eftersom de ska jämföras. Tekniskt sätt skulle man kunna ha olika level spread och delta då de två sekvenserna som ska jämföras vanligtvis inte är lika långa. Men som sagt så skulle symmetrin försvinna. Däremot har varje sida sina egna vikter. För att försäkra sig om symmetrin så har man matat in sekvenserna och sedan vänt på den (sekvensen som matades in i A matas nu in i B och tvärtom) under inlärningen. Tournament auto-rankningen är skapad för att kunna ge två olika slags resultat, binärt eller komplext. Det binära innebär att den helt enkelt ger ett resultat att den ena är bättre än den andra. Det mer komplexa har som uppgift att ge ett resultat som visar hur mycket bättre den ena sekvenser än den andra. I det binära resultatet så betydde alla värden högre än 0,5 att A var bättre än B och vice versa. I det mer komplexa så ser skalan ut på följande sätt. 0 sekvensen A är mycket sämre än sekvens B 0,25 sekvensen A är sämre än sekvensen B 0,5 sekvensen A är samma som sekvensen B 13

0,75 sekvensen A är bättre än sekvensen B 1 sekvensen A är mycket bättre än sekvensen B Även i tournament rating finns möjligheterna att justera parametrarna, men ändras Level spread och delta så ändras till samma värde i båda delarna. Man kan även justera output typ, binärt eller komplext. 4.4 Resultat för de automatiska rankning systemen Rankningarna som genererats av människor användes för att träna de automatiska nätverken. 100 rankningarna användes och delades upp i två, en som skulle träna de nya nätverken och den andra delen som kontrollgrupp. Individerna tränades flera gånger för att modifiera nätverkets vikter med hjälp av back propagation. Man förde sedan statistik på hur det förändrades både för träningen av nätverk och för kontrollgruppen efter varje träningscykel. Nätverket tränades många gånger med olika parametrar, man kan titta på alla olika tester och dess resultat på hemsidan som finns med i källförteckningen. Man kom fram till att skillnaden mellan det tränade nätverket och kontrollgruppen inte var så stor, melodierna lät någorlunda lika även om de mänskligt framtagna var något mer regelbundna. Tanken bakom dessa automatiska rankingsystem var att man ska kunna köra den med flera hundra generationer. Det testades med både 50, 100 och 500 generationer och resultatet var varierande, en del stycken var lite enformiga och trista med få toner medan andra var mer intressanta. Man kan lyssna på de olika melodierna med varierande parametrar på; http://graphics.stanford.edu/~bjohanso/gp-music/ 4.5 Andra system Andra studier har visat att det går att träna neurala nät att lära sig vad bra musik är. I en studie där man producerade Jazz hade de neurala näten tränats genom att lyssna på Charlie Parker. När man sedan spelade Jimi Hendrix Purple Haze så fick den ett fitness värde på 0,99. Detta innebär att den lärt sig mer än Charlie Parker melodier (Biles, J. A. (1994). GenJam: A genetic algorithm for generating jazz solos). Men även i den studien anser man att det finns mycket som går att förbättra och man söker nya vägar, funktioner och parametrar för att förbättra systemet. Som de nämns i artikeln behövs mycket arbete på arkitekturen av de neurala näten för att kunna få längre och bättre musikslingor. 14

4. Slutsats och egna funderingar De mål som satts upp i början var att testa om man kunde få en dator att lära sig ranka musik som en människa och om en dator kan skapa egen musik. Svaret på båda dessa frågor är ja, den lyckades få nästan lika bra rankningar som människorna och den lyckades skapa viss musik själv. Vad tänker kommer detta användas till i framtiden? Blandningen av genetiska och neurala tekniker kommer hjälpa oss att finna djupare strukturer i musik än som tidigare hittats eller använts.(lee Spector, School of cog science, Hampshire College). I sin artikel om Jazz-musiken diskuterar Biles att tanken är att skapa många neurala nät som är specificerade på att klara en del av musiken och att man sedan ska kunna sätta ihop dessa så de kan arbeta tillsammans på ett mer komplext plan. Brad Johnsson och Riccardo Poli tror att deras forskning skulle kunna bli en del av ett dator hjälpmedelsprogram. Det börjar med an människan tränar näten och sedan tar datorn över och kan producera mycket längre melodier och kan användas som del i andra program. Själv tror jag att det inte behöver ta så lång tid innan man kan få nytta utav dessa program. Man kan tänka sig andra, mindre komplexa områden som Internet sidor som ska skapa olika melodier, exempelvis ringsignaler. Man skulle kunna specificera dessa program att vara bra på en viss sak, exempelvis glada reklamsnuttar eller liknande och träna neurala nät efter en fitness specificerad för ändamålet. Den skulle då kunna hjälpa oss vara kreativ på en lägre nivå, man kan sedan tänka sig att sätta ihop dessa och i framtiden ha ett mer komplext system där olika nätverk är tränade för olika slags musik. Trots att målen för denna studie uppnåtts så finns det många som måste förbättras, programmet fungerar med viss begränsning. Intressant att följa studien då man får en bild av hur man kan förbättra system när det inte är tillfredställande. När musiken inte blev lyckad byggdes många funktioner men även begränsningar in i programmet, detta gjorde att mycket av musikskapandet försvann och tar bort lite av poängen. Den skapade inte längre musik utan framtvingade slingor som inte kunde annat än låta ok på sin skala. Men visst har dator själv börjat skapa och det är det som är intressant med den här undersökningen, inte hur bra musiken är. När tekniken och förståelsen väl kommer så kommer det att kunna användas i andra områden och en snabb utveckling är då inte omöjlig. Vi kommer alltid vilja skapa vår egen musik men även detta kan bli inspirerande och nyskapande, det vet vi inte än. 15

5. Källförteckning Bradley E Johanson and Riccardo Poli,"{GP}-Music: An Interactive Genetic Programming System for Music Generation with Automated Fitness Raters", "University of Birmingham, School of Computer Science",1998", ftp://ftp.cs.bham.ac.uk/pub/tech-reports/1998/csrp-98-13.ps.gz, http://graphics.stanford.edu/~bjohanso/gp-music/tech-report Lee Spector and Adam Alpern, Introduction and Recapitulation of Deep Musical structure, Hampshire collage, U.S.A http://citeseer.ist.psu.edu/cache/papers/cs/44/http:zszzszhamp.hampshire.eduzsz~lasccszsz pubszszijcai95mus-toappear.pdf/induction-and-recapitulation-of.pdf Biles, J. A. (1994). GenJam: A genetic algorithm for generating jazz solos. In ICMC Proceedings 1994. The Computer Music Association.", Exempel på melodislingor finns på: http://graphics.stanford.edu/~bjohanso/gp-music/ Brad Johanson, "Automated Fitness Raters for {GP}-Music System",School of Computer Science, University of Birmingham, 1997, http://www.cs.bham.ac.uk/~rmp/eebic/wsc2/gp-music/gp_music.html/gp-music-autoraters.ps.gz http://www.cs.bham.ac.uk/~rmp/eebic/wsc2/gp-music/gp_music.html/gp-music-autoraters.ps.gz", 16